我想将 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 或运行更少的东西。
另一方面,嵌入式系统通常不带交换运行。与其纠结于交换,不如全力以赴,消除交换文件/分区,让自己相信这不是什么好事。
如果内存不足,消除交换只会阻止应用程序启动。在某些情况下,这可能是可取的。