为什么默认的 swappiness 值为 60?如果我降低桌面电脑的 swappiness 值会有什么影响?

我在各种论坛上阅读了关于swappiness的内容,还看了一些视频。很多人表示对于桌面用户来说,将swappiness值降低到60以下是件好事(默认值为60)。有些人则表示60对服务器来说是个不错的选择。为什么对我来说降低swappiness值会更好?而为什么60对服务器来说是个好选择呢?我试图寻找答案(例如在这里here),但无法理解。...请用简单的术语解释 :D

编辑了问题。现在还好吗? - steoiatsl
1可能是重复的问题:为什么大多数人建议将swappiness值减少到10-20? - thomasrutter
4个回答

你的前提是错误的。没有什么“适合服务器”的swapiness值。
Swapiness是指交换操作的数量,尤其是交换的积极程度。对于我的服务器来说,swapiness接近于零,因为我确保它们有足够的内存来运行一切。没有什么“最适合服务器”的值。有一个默认值60,然后还有“你的值”,这取决于使用情况和可用内存。
如果你的服务器有时会使用大量内存,你可以将swapiness值设置得比默认值高一些,但我认为某些服务器(比如数据库服务器)可能希望将其设置得比家用电脑低得多。

好的,没问题 :D 我在关注这个链接:http://unix.stackexchange.com/questions/88693/why-is-swappiness-set-to-60-by-default。第二个答案(目前有2个赞同)说60可能是最适合服务器的。... 让我来搞清楚一下。如果我进行需要大内存的进程,我应该设置较高的swappiness值,而如果我进行多个小进程,则应该设置较低的swappiness值? - steoiatsl
我有一台大约2.9 GHz的双核处理器,配备英特尔集成显卡。顺便说一下,这取决于我的电脑配置。 - steoiatsl
1很难说,这取决于很多因素,正如那个回答中所述->一些数据库可能会进行自己的缓存,但有些可能不会。这取决于程序和硬件的情况。默认情况下,你能做的最好的事情就是测试你的系统在什么情况下的性能表现。正如我所说,我给我的系统添加了足够的内存,并且我知道它们需要什么,所以我可以将swappiness设置为接近0。但在健康的系统中,一些交换也可能是好事。在这里没有一个适合所有情况的简单的“一切都好”的设置建议,要阅读得票最高的答案。另外:第二个答案中说的是“可能是”,而不是“是”。 - Nanne
最重要的是,如果你在谈论你拥有的记忆和你自己,没有特定的需要在这里添加它:我们可以就各种具体情况讨论好几天,而最好的做法是阅读你提供的UNIX链接中最高的答案,并继续测试它在你的环境中的运行方式。 - Nanne
嗯,那时候我说我不明白我读的东西。我对知识(甚至语言)都相当薄弱...所以我只需要继续努力!好的,谢谢 :D - steoiatsl
顺便说一句,最好的做法是保持这些设置为默认值,除非你有理由去改变它们。如果我们讨论的是一个正常运行的桌面环境,那么你的默认设置可能就很好了 :) - Nanne
嗯,我尝试了swappiness 10,感觉还不错,所以现在就坚持使用它:D - steoiatsl

swappiness值的缩放方式让人们感到困惑。他们看到它的范围是0-100,所以误以为是百分比,但实际上有效的最小值大约是50。
大约60意味着在达到大约80%的内存使用率之前不进行交换,留下20%用于缓存等。50意味着等到我们的内存耗尽。较低的值意味着相同的操作,但会更积极地尝试通过其他方式释放内存。
他们在http://lwn.net/Articles/83588/中描述得很好。

高数值代表什么意思,例如80或100? - jocull
3这篇相关文章非常棒,可以帮助我们了解正在发生的事情! - Tim

swappiness设置是Linux计算在特定情况下交换的利弊的调整。高swappiness不会导致系统在不需要时进行交换,而低swappiness(只要不完全禁用交换)不会阻止系统在绝对必要时进行交换。
默认的swappiness大约为60,这是一个非常好的折衷方案,确保系统性能良好,同时确保在有未使用的分配程序内存时不会过度努力地分配缓存内存。
请记住,如果您的所有进程和缓存都有足够的RAM,这通常应该是情况,那么交换不应该成为问题。解决过多交换的首选方法是减少进程的RAM使用量和/或增加物理RAM。如果您真正需要的是更多的RAM,减少swappiness将产生负面影响。
请参阅我对一个非常类似问题的回答。

https://askubuntu.com/a/184221/54256

摘录:
为什么大多数人建议将swappiness减少到10-20?
因为大多数人认为交换 = 不好,如果您不减少swappiness,系统将在实际上不需要时进行交换。这两者都不是真的。人们将交换与系统变慢的时候联系起来 - 然而,它主要是因为系统变慢才进行交换,并非相反。确实有某些情况下,交换可能会带来明显的性能损失,但系统已经考虑到了这一点,并决定不这样做将对系统性能或稳定性产生更大的整体损失,这可能会在以后变得明显。总体而言,默认设置应该能够获得最佳的性能和可靠性。我建议保持默认设置。
...
一旦您使用的内存足够多,以至于没有足够的内存用于平稳运行的缓存,Linux可能会将一些未使用的应用程序内存从RAM重新分配到交换空间。
但它并不是根据一个确定的分配比例来进行的。不是说达到一定的分配百分比,然后Linux开始交换。它有一个相当“模糊”的算法。它考虑了很多因素,可以用“内存分配的压力有多大”来描述。如果有很多“压力”来分配新的内存,那么它将增加一些被交换的机会以腾出更多空间。如果“压力”较小,则会减少这些机会。
您的系统有一个“swappiness”设置,可以帮助您调整如何计算这种“压力”。通常不建议对此进行任何修改,我肯定也不会建议您进行修改。交换总体上是一件非常好的事情 - 任何偶尔的性能损失都旨在通过提高整体系统响应性和稳定性来抵消,适用于各种任务。如果您降低了swappiness,即使在可能真正有用的时候,缓存内存的数量也会比原本少一点。因此,您冒着整体减慢计算机速度的风险,因为缓存较少,而内存被未使用它的应用程序占用。是否对与交换相关的特定问题进行这种折衷是由您决定的。如果您进一步禁用交换,那么在系统内存不足以运行进程时,可能会导致系统不稳定。
当系统变得拥挤并且交换频繁时,会发生什么?
很多时候,人们会看着他们的系统大量使用交换空间并且磁盘活动很频繁,然后将这归咎于交换。这是错误的方法。如果交换达到这种极端情况,意味着您的系统内存非常低,而交换是唯一可以防止系统崩溃或随机终止进程的东西。在这种情况下,如果没有交换,进程将崩溃和终止。交换只是一个更深层次问题的症状。在具有足够内存执行所有任务的系统中,交换只能确保内存以高效的方式利用,将内存分配给缓存而不是休眠的进程。在交换无情地使磁盘活动频繁的系统中,这并不是交换的错。
在选择要交换到磁盘的内容时
随意阅读整篇文章,链接在https://askubuntu.com/a/184221/54256

Swappiness完全与所有这些答案相矛盾。

在这篇文章中,详细介绍了swappiness的实际工作原理: https://gokulvasanblog.wordpress.com/2016/11/14/empathising-mammoths-mentality-a-study-on-linux-memory-management/

Andrew Morton的声明证实了这种模棱两可的情况: https://lwn.net/Articles/83593/

我将把手指放进耳朵里,唱起“啦啦啦”,直到有人告诉我,“我将swappiness设置为零,但它没有按照我的期望工作”。

希望对你有帮助。


1欢迎来到AU。你可以总结一下你指向的文章的关键内容,并解释它如何回答问题,而不是解释swappiness是什么或不是什么。 - Marc Vanhoomissen