swappiness 设置的最小安全值是多少?

swappiness 设置的最小安全值是多少?

我想将 swapiness 设置为最小值,以便 Ubuntu 16.04 仍能运行而不会崩溃。我该怎么做?

以下是输出ls -alt /var/crash

drwxrwsrwt  2 root whoopsie    4096 Jul 26 14:12 .
-rw-r--r--  1 root whoopsie    1928 Jul 26 14:12 virtualbox-4.3.0.crash
-rw-r-----  1 some_user   whoopsie 3978513 Jul 26 14:02 _usr_bin_compiz.1000.crash
drwxr-xr-x 15 root root        4096 Aug  8  2016 ..

答案1

这取决于你的 Ubuntu 有多少物理内存,我们可以问自己,当我有很多内存时为什么我应该使用高 swappiness 值?

您还可以进行实验,看看什么是最适合您的情况的,但我不建议您使用“0”禁用交换,而是使用“10”之类的值来提高性能。如果您想要接近“0”的值,那么就使用“1”。

数字如何运作

参数值设置为“60”意味着当 RAM 达到 40% 容量时,内核将进行交换。设置为“100”意味着内核将尝试交换所有内容。设置为 10(就像我在本教程中所做的那样)意味着当 RAM 已满 90% 时将使用交换。[1]

换句话说,“60”表示当内存容量剩余60%时开始交换。

0 和 1

“1” 是可能的最小“主动交换”设置,而“0”表示完全禁用交换并且仅当 RAM 完全填满时才恢复。[1]

有什么建议?

这是一篇好文章阅读,包括建议。

答案2

您的问题没有真正的答案,因为总是“视情况而定”。

交换实际上并不会直接影响性能,这取决于您正在做什么。

一般来说,您的内核已经针对性能进行了优化,并且您不太可能通过调整值来获得任何性能。

关于交换,问题是您有多少 RAM 以及您使用了多少?

如果您使用的 RAM 比您现有的 RAM 多,那么您将使用交换空间,这将影响性能。但是,如果您没有可用的交换空间,并且 RAM 不足,那么您的程序将崩溃或锁定,或者您将丢失数据,这很难说。

如果由于交换而导致性能下降,解决方案是购买更多 RAM,而不是禁用交换。

性能可能会受到显卡或其他硬件的影响,包括性能不佳的无线驱动程序(或任何内核驱动程序)。

为了调试您的性能问题,我们需要了解您的硬件、您正在做什么、是什么让您认为您有性能问题,以及在您进行交换或其他调整之前和之后的基准测试。

我的系统有 4 GB 的 RAM,在运行浏览器、文字处理、电子邮件等常规桌面活动时,我从未耗尽 RAM

bodhi@daemon:~$free -m
              total        used        free      shared  buff/cache   available
Mem:           5403        2558         739          77        2106        2398
Swap:             0           0           0

事实上我甚至没有使用交换分区。

但是,如果我想启动一个虚拟机并为其提供 1 GB 的 RAM,那么我肯定需要交换,因此在这种情况下我会挂载我的交换分区。

在我的大型服务器上,我运行多个虚拟机,但我有 16 GB 的 RAM。对于我的所有 VM,我时不时会使用交换,但次数不多。使用交换肯定比 VM 崩溃要好。

所以这取决于……服务器端,如果我的交换达到虚拟机性能变慢的程度,我就会购买更多 RAM。桌面端,我不需要运行足够的虚拟机来证明购买更多 RAM 是合理的。个人选择。

您需要分析您的使用情况并做出自己的选择。目前,我们甚至不知道您受到交换空间的限制有多大,而不是其他问题。如果您有足够的 RAM,则根本不使用交换空间,那么这不是问题。

答案3

Ubuntu 不会因 swappiness=1 而崩溃,因为它仍会使用交换文件,所以请尽一切努力避免这种情况。

与合理的交换相比,它实际上会降低性能。

事实上,swappiness 值为 1 将阻止 ubuntu 进行交换,直到最后的时刻。这意味着在启动几乎已满内存的新应用程序时,可能会出现延迟和崩溃。因为它需要换出很多一次加载以适应新应用程序。然后,由于内存已完全填满,每次页面丢失都会导致新页面被交换进来,可能每秒多次,从而进一步降低性能

ubuntu 首先交换出的东西是未使用的代码(应用程序入口点)和缓存文件,这些东西需要“在内存中”但可能永远不会再被访问,因此强制这种行为是完全没有必要的。

内核非常擅长管理其内存,如果您使用默认设置来交换,那么您应该购买更多的 RAM 或运行更少的东西。

另一方面,嵌入式系统通常不带交换运行。与其纠结于交换,不如全力以赴,消除交换文件/分区,让自己相信这不是什么好事。

如果内存不足,消除交换只会阻止应用程序启动。在某些情况下,这可能是可取的。

相关内容