我有一个带 VPSnoc 的 VPS,它表现出一些奇怪的行为。当我用“ps faux”总计 %MEM 列时,我得到大约 23% 的使用率,但当我运行 free 时,我得到 419580/524288 = 80% 的使用率。这是非进程使用的大量 RAM,比我管理的任何其他机器,甚至我朋友的同一提供商的 VPS 都要多得多。
我已经给 VPSnoc 支持发过几次电子邮件了,但他们似乎甚至无法理解系统上发生的这种事情非常奇怪。
我不会抱怨,除了偶尔会出现内存不足错误(例如当我尝试将 apache2 工作程序设置为 >7 个线程或 >8 个同时连接时),这些错误并不好。
这可能是配置问题,我可以修复/解决吗?或者这可能是正常现象吗?我不再希望 VPSnoc 会承认这个问题。
如果有帮助的话,他们使用 OpenVZ。
编辑:我调整了一些 MySQL 设置,这使得 ps 报告的 RAM 使用率从 7% 降至 4%,但 free 报告的 RAM 使用量下降了约 20%。我不再收到内存不足错误,但仍然希望更好地理解报告。free -m 的当前输出为:
total used free shared buffers cached
Mem: 512 320 191 0 0 0
-/+ buffers/cache: 320 191
Swap: 0 0 0
我现在更好地理解了可能存在的缓冲区/缓存差异,但此输出未显示任何差异(或从未在此框中显示过),并且不应该导致实际的内存不足错误。
答案1
答案2
我使用这个脚本来获取有关内存使用情况的更多信息:http://www.pixelbeat.org/scripts/ps_mem.py
答案3
经过大量的调试和与主机的斗争后,我几乎可以肯定,这只是 OpenVZ 的一个错误,或者是他们使用它的方式的一个错误。似乎 ps 中的 %MEM 显示的是实际物理 RAM 的百分比,而 free 显示的是分配给我的 VPS RAM 中空闲的数量。
答案4
当您运行 时free
,“已用”列的输出包括缓冲区和缓存,这对于 Linux 机器来说是正常的。Linux 拥有最先进的内存管理器之一,因此它会尝试利用“空闲”内存来帮助系统中较慢的部分,例如磁盘。检查此输出:
# free
total used free shared buffers cached
Mem: 1048576 924824 123752 0 102444 481004
-/+ buffers/cache: 341376 707200
Swap: 2096472 0 2096472
从这里看,系统似乎消耗了 88% 的内存,但其中约 52% 是操作系统缓存,另外 11% 是缓冲区。这需要一些时间来适应,但 Linux 会尽力利用“空闲”内存。