为什么默认的 swappiness 是 60?如果我降低台式机的 swappiness 值会有什么影响?

Min*_*ael 17 swap

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

Nan*_*nne 22

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

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

如果您的服务器有时会使用 LOADS 内存,您可以将它们设置为高于默认值,但我会说某些服务器(数据库服务器?)可能希望将它们保持在低于家用计算机的水平。


小智 12

swappiness 值的缩放方式让人们感到困惑。他们看到它的范围是 0-100,所以他们想到了百分比,而实际上有效最小值约为 50。

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

http://lwn.net/Articles/83588/ 上很好地描述了它

  • 链接的文章非常适合了解发生了什么! (2认同)

tho*_*ter 5

swappiness 设置是对 Linux 计算特定场景中交换的好处/缺点的方式的一种调整。高 swappiness 不会导致系统在不需要时进行交换,而如果您不完全禁用交换,则低 swappiness 不会阻止您的系统在绝对必要时进行交换。

60 左右的默认swappiness 是一个很好的折衷方案,通过确保在有未使用的已分配程序内存时分配缓存内存不会太费力,从而确保系统的良好性能。

请记住,如果您有足够的 RAM 用于所有进程加上缓存,如果您有足够的物理 RAM,通常应该是这种情况,无论如何交换对您来说都不是问题。解决交换过多问题的首选方法是减少进程对 RAM 的使用,和/或增加物理 RAM。如果您真正需要的是更多 RAM,那么减少 swappiness 会产生负面影响。

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

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

摘抄:

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

因为大多数人认为交换=坏,并且如果您不减少交换,系统将在真正不需要时进行交换。这两个都不是真的。人们将交换与系统陷入困境的时间联系起来 - 然而,交换主要是因为系统陷入困境,而不是相反。确实,在某些时候交换会产生明显的性能损失,但系统已经将其考虑到其交换决定中,并决定不这样做会对系统性能或稳定性造成更大的整体损失,这可能后来变得引人注目。总的来说,默认设置应该会产生最佳的整体性能和可靠性。我建议将其保留为默认值。

...

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

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

您的系统具有“swappiness”设置,可帮助您调整“压力”的计算方式。通常根本不建议更改它,我当然永远不会建议您更改它。交换总体上是一件非常好的事情 - 任何偶尔的性能损失都旨在通过提高整体系统响应能力和广泛任务的稳定性来抵消。如果你减少swappiness,你会让缓存内存量比其他情况下收缩更多一点,即使它可能真的很有用。因此,您通常会冒着降低计算机速度的风险,因为缓存较少,而内存被甚至不使用它的应用程序占用。对于您在交换时遇到的任何特定问题,这是否是一个足够好的权衡取决于您。

当系统陷入困境并大量交换时会发生什么?

很多时候,人们会看到他们的系统正在严重打击磁盘并使用大量交换空间并指责交换。这是错误的做法。如果交换达到这种极端,则意味着您的系统内存极低,交换是唯一防止它随机崩溃或终止进程的方法。如果没有交换,在这种情况下,进程将崩溃并死亡。交换是更深层次问题的征兆。在具有足够内存用于所有任务的系统中,交换仅确保以有效方式利用内存,将内存分配给它认为值得的休眠进程上的缓存。在交换无情地冲击磁盘的系统中,这不是交换的错。

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

...

但是交换如何加速我的系统?交换不会减慢速度吗?

将数据从 RAM 传输到交换的行为是一个缓慢的操作,但只有在内核非常确定整体收益大于此时才会执行。例如,如果您的应用程序内存已经上升到几乎没有缓存可用并且您的 I/O 非常低效因此,您实际上可以通过释放一些内存来提高系统的速度,即使在交换数据以释放数据的初始费用之后。

请随时在https://askubuntu.com/a/184221/54256阅读整篇文章