重启后有一半以上的内存正在使用

我正在尝试使用Azul的ZingVM进行testing,这需要预先分配大量内存

问题是,在我的服务器(运行Cent OS 5.8)有16GB内存,超过8GB将在重新启动后立即使用…像这样(我重新启动服务器,SSHlogin到它,并运行一次free -m ):

  total used free shared buffers cached Mem: 16048 8281 7767 0 1 19 -/+ buffers/cache: 8260 7788 Swap: 18047 0 18047 

缓冲区和caching显然不贡献于使用的8GB内存。 这是每天运行Apache Tomcat的应用服务器(用于testing),我相信Tomcat不会自动启动。

我试图找出哪个进程正在使用如此大量的内存与top ,但只发现最高RES使用过程只使用4460K …

不过,我有另一台服务器(与OS OS 5.8)运行MySQL。 这个数据库服务器的内存使用情况是正常的。 现在,我正在testing数据库服务器上的ZVM,并且在启动时分配65%的RAM,重新启动后, free -m显示:

  total used free shared buffers cached Mem: 16048 10942 5105 0 3 55 -/+ buffers/cache: 10883 5165 Swap: 18047 0 18047 

所以…如果我们忽略了Zing所使用的16GB(约10GB)的65%,重启后使用的内存应该只有几MB。

现在我只是testing如果我可以让Tomcat在ZingVM下工作。 然后我需要在另外两个Cent OS服务器上运行真正的testing,不幸的是,这两个服务器也有同样的问题。 也就是说,我们有4个服务器,3个服务器有这个问题。

什么可能是这个问题的原因? 我可以解决它,而无需在这些机器上重新安装操作系统?


更新:

这里是当我尝试将它设置为使用内存的75% (它是默认值)时,zing-system-tool报告的内容。 当我指定85%时,输出格式完全一样。

 Fatal error: Not enough free memory (memoryForAzulBytes (12620660736) > MemFree (8142327808)). zing-memory: ERROR: Configure pmem failed Fatal error: os::safeSystem: command '/sbin/service zing-memory restart' failed. 

这里是数据库服务器上的一个成功的分配(我这次指定了68%,旧值是65%; ZST将释放自己保留的内存):

 Info: azulPmemPages: 5456. INFO: az_pmem_reserve_pages (num2mPages 5456) succeeded INFO: az_pmem_fund_transfer (to 7, from 0, bytes 11442061312) succeeded INFO: az_pmem_fund_transfer (to 1, from 7, bytes 570425344) succeeded INFO: az_pmem_fund_transfer (to 3, from 7, bytes 570425344) succeeded INFO: az_pmem_fund_transfer (to 0, from 7, bytes 10301210624) succeeded Info: You can now start Java processes up to -Xmx9824m or -Xmx9g. Info: Azul pmem initialized successfully. zing-memory: INFO: start successful zing-memory: INFO: restart successful 

更新2:

我在有问题的服务器上的/ proc / meminfo中看到了这一点:

 HugePages_Total: 4096 HugePages_Free: 4096 HugePages_Rsvd: 0 Hugepagesize: 2048 kB 

而在数据库服务器上,全是0. 这可能是使用内存的原因吗?

好的,我明白了:

在问题中看到我的更新2。 这就是原因。

巨大的页面是保留的; 除非指定,否则应用程序将不会使用它。 所以ZST不能分配内存。

当我将Hugepage设置为零时,内存立即释放,ZST成功分配内存。

在有问题的服务器上尝试slabtop ,看看内核是否由于某种原因分配了大量的RAM。 例如,XFS可以为其caching分配大量内存,而不会在缓冲区/caching列中可见(尽pipeXFS将在需要时释放内存)。