在 RedHat 5 服务器上,我们看到 top 报告交换空间有 0k 可用。vmstat 显示已使用的交换空间数量相同,但没有分页。我们关闭了唯一的应用程序,top 仍然报告已使用交换空间 100%。如果我们重新启动,交换空间将变为已使用交换空间 0k。有什么意见吗:我对 top 的解释是否不正确?交换分区中真的有什么东西吗?您能给我指出可以解决这个问题的文档吗?如果不正确,我们可以纠正吗?
更新:Swappiness 的默认值为 60。为了澄清上述情况,在终止我们的应用程序后,我们(即非操作系统拥有的进程)除了我的 shell 和 top 本身之外没有其他进程在运行,但仍然显示 0k 可用交换空间。我认为 top 报告的信息不正确,而不是我们没有可用交换空间。
谢谢。
答案1
也检查一下你的 swappiness。可能有人把它设置得太高了。
cat /proc/sys/vm/swappiness
答案2
仅仅因为您终止了占用内存最大的进程,并不意味着内核会立即开始从磁盘交换页面。如果这些页面未被积极使用,它们将留在那里,直到被交换出这些内存部分的进程再次引用。交换性将影响内核将内容移入和移出交换的积极程度。
https://help.ubuntu.com/community/SwapFaq#What_is_swappiness_and_how_do_I_change_it.3F对 swappiness 的实际作用以及改变它可能如何影响您的系统进行了很好的讨论。
正如查尔斯所说,你可能因为某种原因将其设置得不适当地高。
答案3
Top 通常不会以百分比形式报告任何内存统计信息,因此我将假设您自己计算了可用内存百分比。在 top 中按“G3”显示每个进程使用的内存摘要。哪个进程占用了所有内存,是您的 APP 还是您的 APP 正在使用的东西?如果您可以尝试终止占用内存的应用程序,您应该会在一段时间后看到可用内存恢复。一旦系统开始交换,可能需要一些时间才能恢复。此外,请确保您确实为系统分配了足够的物理 RAM。如果您的内存分配小于 512MB,请考虑使用 512MB 作为基本最小值,但这仅适用于您的系统是虚拟化客户机的情况。