为什么默认的可交换性为60?如果降低台式机的swappiness值会有什么影响?


16

我在各种论坛上都读到关于交换性的内容,并且看到了一些视频。许多人说,对于桌面用户来说,将swappiness值降低到60以下(这是默认值)是一件好事。有人说60适合服务器。到底为什么降低它对我来说更好,为什么60对服务器有利?我试图寻找答案(例如,我在这里看过),但听不懂。...请使用简单的术语:D


编辑了问题。现在好吗?
米娜·迈克尔

Answers:


22

你的前提是错的。没有“对服务器有利”的交换值。

Swapiness是完成的交换量,尤其是交换的积极程度。对于我的服务器,可交换性接近于零,因为我要确保它们具有足够的内存来存储所有内容。没有“最适合服务器”的价值。有60,这是默认值,然后有“您的值”,这取决于使用情况和可用内存。

如果您的服务器有时使用内存加载,则可以使它们高于默认值,但是我想说某些服务器(数据库服务器?)可能希望将其保持在比家用计算机更低的水平。


很好:DI正在遵循unix.stackexchange.com/questions/88693/…。第二个答案(目前有2个赞成票)说60可能最适合服务器。...让我弄清楚这一点。如果我执行需要大内存的进程,我应该设置高交换率,如果我执行多个小进程,我应该设置低交换率?
米娜·迈克尔

(并且取决于我的计算机的规格)顺便说一下,我有一个约2.9 GHz核心2核,带有英特尔集成显卡
Mina Michael

1
不可能说。如答案中所述,这取决于很多事情->有些数据库可能会进行自己的缓存,但有些可能不会。这取决于程序和硬件。有一个默认值,最好的办法是测试系统在什么情况下的性能。如前所述,我已经在系统中添加了足够的内存,而且我知道它们的要求,因此我可以将Swappiness设置为接近0。但是在健康的系统中,进行一些交换可能是一件好事。这里没有简单的“全民之神”设置建议,请阅读最受好评的答案。另外:在第二个答案中说“可能是”而不是“是”
Nanne 2014年

(根据您的规范:最重要的是,如果您正在谈论自己和您的内存,但没有特别需要在此处添加它:我们可以谈论各种细节几天,最好的方法是阅读您所提供的Unix链接上的最高答案,并继续测试它在您的环境中的工作方式。)”
Nanne 2014年

嗯,那是我说我不明白所读内容的时候。我的知识(甚至是老实的XD语言)还很薄弱……所以我只需要继续努力!好的,谢谢:D
Mina Michael

8

swappiness值的缩放方式会使人们感到困惑。他们认为该范围为0-100,因此他们认为实际有效最小值约为50时所占的百分比。

60大致意味着在我们达到约80%的内存使用率之前不要交换,而将20%的内存用于此类。50表示等到内存耗尽。较低的值表示相同,但​​尝试通过其他方式释放内存的积极性更高。

http://lwn.net/Articles/83588/上对它的描述很好


较高的值是什么意思,例如80或100?
jocull

5

swappiness设置是对Linux在特定情况下计算交换的收益/缺点的方式的一种调整。较高的可交换性不会导致系统在不需要时进行交换,而较低的可交换性(如果您没有完全禁用交换功能)将不会阻止系统在绝对必要时进行交换。

默认交换率为60左右,这是一个很好的折衷方案,通过确保在没有使用的已分配程序内存的情况下分配高速缓存内存不会太费劲,从而确保系统的良好性能。

请记住,如果您有足够的RAM用于所有进程以及高速缓存(通常,如果您有大量的物理RAM就是这种情况),那么交换对您来说就不成问题。解决过多交换问题的首选方法是减少进程使用的RAM和/或增加物理RAM。如果您真正需要的是更多的RAM,则减少交换可能会产生负面影响。

请参阅我写的一个非常类似的问题的答案:

/ubuntu//a/184221/54256

摘抄:

为什么大多数人建议将互换性降低到10-20?

因为大多数人认为交换=不好,并且如果您不减少交换问题,那么系统将在真正不需要时进行交换。这些都不是真的。人们将交换与他们的系统陷入困境的时间联系在一起-但是,这主要是因为系统在陷入困境,而不是相反。的确,在某些时候交换可能会导致明显的性能损失,但是系统会在决定交换时考虑到这一点,并决定不这样做会给系统性能或稳定性带来更大的总体损失,后来变得引人注目。总体而言,默认设置应具有最佳的总体性能和可靠性。我建议将其保留为默认值。

...

一旦您用完了足够的内存以至于没有足够的内存来平滑运行的缓存,Linux可能会从RAM重新分配一些未使用的应用程序内存以进行交换。

但是,它不会根据明确的界限执行此操作。并不是您达到一定的分配比例,然后Linux开始交换。它具有相当“模糊”的算法。它考虑了很多事情,最好用“内存分配有多少压力”来描述。如果分配新内存的压力很大,那么将增加交换某些内存以腾出更多空间的机会。如果“压力”较小,则将减少这些机会。

您的系统具有“ swappiness”设置,可帮助您调整“压力”的计算方式。通常不建议您完全更改它,我当然也绝不建议您更改它。交换总的来说是一件非常好的事情-任何偶然的性能损失都旨在通过针对各种任务的整体系统响应能力和稳定性的提高来抵消。如果您减少了交换性,则可以使高速缓存的存储量比原先的压缩量稍微减少一点,即使它可能确实有用。因此,您总体上有可能降低计算机的速度,因为缓存较少,而什至没有使用它的应用程序占用了内存。对于交换时遇到的任何特定问题,这是否足够好权衡取决于您。

当系统陷入瘫痪并大量交换时,会发生什么情况?

很多时候,人们会看到他们的系统正在严重破坏磁盘,并使用了大量交换空间并为此怪罪于交换。那是错误的方法。如果交换曾经达到这种极限,则意味着您的系统内存极低,并且交换是唯一防止它随机崩溃或杀死进程的事情。如果不进行交换,在这种情况下,进程将崩溃并死亡。交换是更深层次问题的征兆。在一个具有足够内存来执行所有任务的系统中,交换仅可确保以高效的方式利用内存,并通过休眠进程将内存分配到缓存中,这是值得的。在交换不停地破坏磁盘的系统中,这不是交换的问题。

在选择要交换到磁盘的内容时,系统会尝试选择实际未使用的内存-读取或写入。它有一个相当简单的算法来计算此参数,大多数情况下它的选择效果很好。

...

但是如何交换可以加快我的系统速度?难道不减慢速度吗?

将数据从RAM传输到交换的操作很慢,但是只有在内核完全确定总体收益将超过此收益时才采取此操作。例如,如果您的应用程序内存上升到几乎没有缓存的状态,并且由于这个原因您的I / O效率很低,那么您实际上可以通过释放一些内存来提高系统速度,甚至交换数据以释放数据的初始费用后。

随时通过/ubuntu//a/184221/54256阅读全文


0

轻浮与所有这些答案完全矛盾。

交换的实际工作在文章中进行了描述: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
欢迎来到澳大利亚。您能否总结一下您所指向的文章的要点,并解释它如何回答问题,而不是解释什么是交换性。
Marc Vanhoomissen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.