重启后内存使用量超过一半

重启后内存使用量超过一半

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

问题是,在我的服务器(运行 Cent OS 5.8)上,它有 16GB 的内存,重启后将使用超过 8GB 的​​内存...像这样(我重启服务器,用 ssh 登录,然后free -m立即运行):

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

显然,缓冲区和缓存不会占用 8GB 内存。这是一个每天运行 Apache Tomcat 的应用程序服务器(用于测试),我确信 Tomcat 不会自动启动。

我尝试找出哪个进程使用了​​如此大量的内存top,但却发现使用内存量最高的进程只使用了 4460k……

但是我有另一台服务器(使用 Cent OS 5.8)运行 mysql。此数据库服务器的内存使用情况正常。现在我正在数据库服务器上测试 ZVM,并且 Zing 在启动时分配 65% 的内存,重新启动后,显示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 的 65%(大约 10GB),重启后使用的内存应该只有几 MB。

现在我只是在测试是否可以在 ZingVM 下运行 Tomcat。然后我需要在另外两台 Cent OS 服务器上进行实际测试,不幸的是,这两台服务器存在同样的问题。也就是说,我们有 4 台服务器,其中 3 台服务器存在此问题。

导致此问题的原因可能是什么? 我可以在不重新安装这些机器上的操作系统的情况下解决此问题吗?


更新:

以下是我尝试将 zing-system-tool 设置为使用时报告的内容75%(这是内存的默认值)。当我指定 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。这可能是内存占用的原因吗?

答案1

好的,我明白了:

请参阅问题中的我的更新 2。这就是原因。

Hugepage 是保留的;除非指定,否则应用程序不会使用它。因此 ZST 无法分配内存。

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

答案2

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

相关内容