贫穷限制了我的想象,192GB的内存,日常使用率93%

摘要

这几天遇到一个程序员,做的是大数据处理方向,他们公司使用的那台服务器配置的是192GB的内存,因为不涉及图形计算,所以没有独立的显卡,对显存也没有特殊的要求。关键在于配置的那么大的内存,日常的使用率居然达到93%!真的是贫穷限制了我的想象

物理服务器与云服务器不同,配置的CPU、内存等资源,基本上都是独享独占的,除了做了一系列的虚拟系统分配,或者云主机之外,我一直认为单点服务器配置到64GB的内存已经可以满足日常的处理需求了;如果需要大量的图形计算,将显存配置到16GB,也已经是目前认知范围内的顶配。

大内存有大智慧?

这几天遇到一个程序员,做的是大数据处理方向,他们公司使用的那台服务器配置的是192GB的内存,因为不涉及图形计算,所以没有独立的显卡,对显存也没有特殊的要求。关键在于配置的那么大的内存,日常的使用率居然达到93%!真的是贫穷限制了我的想象,那么大的内存,做怎么样的大数据能够使用那么多的内存数据交换,而且这样使用内存,让SSD固态硬盘情何以堪,岂不要无地自容吗?

为什么用大内存?

出现这样的情况有两种可能:

(1)运行的应用程序通过多线程或多进程同时申请内存,单个线程或进程申请的内存空间不大,但同时有1000个或者1万个在运行,那么需要的内存空间自然就大了。这就带来了另外一个问题,就是我们平时说的线程池的大小的设置。不可否认,线程池大小的设置跟硬件的配置成正比,但是另外一方面,出于效率和系统稳定性的考虑,我们一般也会对线程池的大小做限制。日常的单点服务器处理,瞬间并发1000个请求就已经属于我们定义的满负荷状态;这么大的并发出现在服务器上,多数情况下是程序员通过代码控制的。从这一点上面来说,代码将硬件资源用足用满是无可厚非的。

(2)但是也不排除另外一种情况,就是在单个进程或线程里通过内存空间的申请不断的增大对资源的占用,从而将资源使用做到最大化。这样的编程思想没有错,问题出在,这样的软件在日常使用过程中容易出现不稳定的几率也比较多。一种最典型的情况就是服务器的内存硬件的某一部分坏掉了,但是并不影响整体运行的情况下,这个时候表现出来的只是内存变小,而之前软件项目的编程中已经对资源做了最大限度的利用,就容易出现内存溢出和内存泄漏,导致软件崩溃的情况出现。即使我们认为这些硬件是百分百可靠的,还是会出现其他的应用程序,甚至系统进程抢占内存资源的情况,这个时候,编写的应用程序能够得到的资源就变小了,也会导致程序崩溃。

主要的结论

说了这么多,结论就是,在服务器资源利用最大化与软件稳定运行之间,要找到一个平衡点。对于服务器资源的申请和消耗,要注意适度而止,如果确实需要那么多的服务器资源,可以通过分布式部署以负载均衡等方式来实现,从而确保软件应用的稳定性。

admin