首先,问题是:我需要找出 Linux 系统(CentOS)上总共使用了多少内存(加减一兆字节),但任何通用解决方案都应该有效。我想以某种方式解析 ps aux,但添加 VSZ RSS 不起作用。
现在,对于“你为什么要给自己设置障碍”的解释,如果你关心的话……
我位于 OpenVZ 容器内。通常,free -m 或 cat /proc/meminfo 可以正常工作,但主机操作系统有一个错误。提供商不想将所有容器都关闭以进行修补,因此我不得不忍受一段时间。不幸的是,如果我重新启动 VPS,我必须打开一张票以重置计数器,否则在我看来我的 VPS 有 10GB 的 RAM,其中包括 meminfo 和 free。本周,我自然会进行各种测试和重新启动。
VPS 确实只有 1GB/2GB 的突发空间。如果一切顺利,我看到有 2048M 可用,并且 free -m 输出正常。
我确实需要找到一个解决方案,不依赖于 proc 就能显示正在使用的正确内存......如果可能的话。
答案1
抱歉,我觉得你运气不好。如果主机有 bug 导致你无法看到正确的内存量,那么我认为没有办法解决这个问题。如果你的内核无法确定内存量,那么还有什么办法呢?
也许你可以用一些内核参数欺骗你的内核,使它只有 2 GB 可用?如果你运行 32 位系统,你可以得到一个只分配 1 GB 的内核。如果我没记错的话,你可以配置一个 32 位内核来分配最多 1 GB(我认为更接近 750MB)、4 GB 或 64 GB(bigmem),后者会带来性能损失。而且你实际上无法为每个进程分配超过 4 GB 的内存。
看:http://www.kernel.org/doc/Documentation/kernel-parameters.txt
mem=nn[KMG] [KNL,BOOT] Force usage of a specific amount of memory
Amount of memory to be used when the kernel is not able
to see the whole system memory or for test.
看看是否可以找到可以使用的其他参数。