在阅读本文之前,请注意我了解缓存的好处。我熟悉“未使用的内存就是浪费的内存”这一信条。
这个问题是我从上一个问题改编而来的:
在这个问题中,我对调整服务器使用和缓存内存的方式感到好奇。系统是相当动态的,所以我相信缓存文件实际上并没有给我带来太多好处。此外,我们的服务器上的代码必须在短时间内快速访问大量内存来处理视频文件,我相信我会看到,直接处理 RAM 而不是从缓存中清除它然后再交出会带来性能上的好处。
我想知道你们是否有调整以下文件中的默认值 60 的经验(这恰好是在 Ubuntu 服务器上):
/proc/sys/vm/swappiness
如果是这样,您看到了什么影响。如果我将默认值 60 替换为 30,我是否会看到更少的交换和更多陈旧缓存的重用?我是否应该接近 0 或 100 来减少交换并增加缓存的重用?
最后,有人知道为什么默认设置为 60 吗?
注意:如果接近 0,Linux 会倾向于将应用程序保留在 RAM 中,而不会增加缓存。如果接近 100,Linux 会倾向于将应用程序换出,并尽可能扩大缓存。默认值为 60。- 感谢 3dInfluence 提供以下链接。
答案1
编辑:重写答案,以便它更简短,更清晰,我希望:)
您确实需要了解 VM 子系统作为一个整体是如何工作的,才能开始调整可调参数,否则您可能会发现没有得到预期的结果。本文是了解这些设置如何与桌面倾斜协同工作的一个很好的起点。
所以,关于您的问题还有更多内容。Swappiness 控制 VM 子系统何时通过取消映射和分页(即交换)来回收进程表页面。此可调参数的工作原理是,当映射到进程页表的内存百分比 + swappiness 值 > 100 时,告诉 VM 子系统查找要交换的页面。因此,当系统使用超过 40% 的系统内存时,设置为 60 将导致系统开始从进程页表中分页出陈旧的页面。如果您想让程序以牺牲缓存为代价使用更多内存,您需要降低 swappiness 值。您还需要查看 /proc/sys/vm/min_free_kbytes 和 /proc/sys/vm/vfs_cache_pressure。因为这还将控制保留多少内存以及缓存的积极性。有关后者的更多信息,请参阅我链接到的那篇文章。