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