如何在Linux内存管理中配置swappiness?


11

swappiness参数控制内核将进程移出物理内存并移入交换磁盘的趋势。默认设置是什么?如何配置以提高整体性能


3
更改交换位置后,我发现清空交换位置swapoff -a以重新开始很有用。serverfault.com/a/354384/203035
Nemo

Answers:


10

Linux内核提供了可调整的设置来控制交换性

$ cat /proc/sys/vm/swappiness
60  

/etc/sysctl.conf以root身份打开。然后,将以下行更改或添加到文件中:

vm.swappiness = 10

要临时更改swappiness值,请尝试以下命令:

$ echo 50 > /proc/sys/vm/swappiness

1
它如何回答“如何进行配置以提高整体性能?”
techraf '16

当系统性能较慢时需要交换,因为交换有时发生在可用RAM耗尽时,这会减慢系统运行速度(甚至崩溃的应用程序),即使没有交换也是如此。因此,为了简化起见,发生交换是因为您的系统陷入了瘫痪,而不是相反—在某些情况下,它可以节省很多时间。
Mongrel,2016年

2
您是否也不需要sudo sysctl -p /etc/sysctl.conf更改才能生效?
pkaramol

11

维基百科,来自Swappiness

您可以在虚拟文件中设置此值。/proc/sys/vm/swappiness 所提到的值将决定交换空间的使用方式,以下是带有意图的值。

vm.swappiness = 0   # Swap is disabled. In earlier versions, this meant that the kernel would swap only to avoid an out of memory condition, but in later versions this is achieved by setting to 1.
vm.swappiness = 1   # Kernel version 3.5 and over, as well as kernel version 2.6.32-303 and over: Minimum amount of swapping without disabling it entirely.
vm.swappiness = 10  # This value is sometimes recommended to improve performance when sufficient memory exists in a system, this value *10* could be considered for the performance being expected. 
vm.swappiness = 60  # The default value.
vm.swappiness = 100 # The kernel will swap aggressively.

尽管实际上也取决于需求,但是如果可用的物理内存足够,则交换空间可能就不需要很大,按照Layman的说法,无需更改默认值60


@techraf更新了答案。
Keyshov Borate

1
我还是建议在VM中将其更改为10,以防万一。
Rui F Ribeiro

2

在RedHat / CentOS中,默认值为60。
“为了提高性能”是非常宽泛的术语。您要提高什么性能?

内存不足是否有问题?
当仍有可用内存/缓存的内存时,系统是否会交换?

在Linux中,可用内存=浪费的内存,因此几乎所有可用内存都用于磁盘缓存。
在某些情况下,swappiness = 60会导致如果长时间未访问内存中的页面,则无论您是否有未分配的RAM,它们都将移至SWAP。
将某些内存页移至SWAP并不是一件坏事。

请进一步说明您的问题,以获取更详细的答案。

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.