我有一台小型 VPS 服务器,我将其用作微型和开发网站托管,以及当我想在笔记本电脑之外的地方做某事时用作平台。它的规格有点不足,只有 128M 可用内存(256 突发),但它可以工作。
为了解决这个问题,我拒绝了许多设置等等。但是,每当我尝试做某事时,它仍然会达到我的极限。
我对此进行了大量研究,但除了人们误将缓冲区和缓存当作实际进程内存使用量之外,我什么也没发现。
我总觉得有些事情不对劲,所以我终于尝试了
sh-3.2$ free
total used free shared buffers cached
Mem: 131072 131072 0 0 0 0
-/+ buffers/cache: 131072 0
Swap: 0 0 0
sh-3.2$ ps aux | awk '{sum += $4} END {print sum}'
67.4
sh-3.2$
因此,尽管我的所有进程加起来占总量的 2/3,但我的内存仍然完全用完了。htop 与它们两个都一致(顶部的条形图显示 128M/128M;数字一致)。
可能是 free 无法正确跟踪,或者是由于 VPS 的原因?还是有神秘原因占用了我 30% 的可用内存?
答案1
您正在对进程的驻留集求和。这不包括任何非驻留但已分配的虚拟空间。(这不能从交换中分配,因为您没有。)如上所述,您的计算还排除了内核及其数据结构。
共享代码和未使用的堆栈空间也计入虚拟大小。映射库时,您可能只分页库的一小部分(驻留集),但需要为整个库(虚拟集)分配空间。只有共享库的只读空间才会被重复计算。
答案2
你的内核使用了多少内存?
grep Memory /var/log/syslog
并查看保留字段。