Linux Swap 交换分区应该设置多大

Linux Swap 交换分区,就是我们课本说讲过的虚拟内存的概念。

当 Linux 系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到 Swap 空间中,等到那些程序要运行时,再从 Swap 中恢复保存的数据到内存中。

以前几乎所有 Linux 系统管理的书上都推荐设置交换分区大小为内存的 2 倍。这些建议到了现在就不那么适用了,现在的服务器动不动就是 16GB、32GB 甚至 256GB 内存,难道相应的交换分区也要扩大到 32GB、64GB、512GB?

那么 Swap 分区到底设置成多大才最优?

首先看下 Redhat 官方的文档中关于 Swap 分区大小设置的建议

物理内存 建议的交换空间大小 如果开启休眠功能建议的交换空间大小
2GB 以下 内存的 2 倍 内存的 3 倍
2GB – 8GB 等于内存大小 内存的 2 倍
8GB – 64GB 至少 4G 内存的 1.5 倍
64GB 以上 至少 4G 不建议使用休眠

因此,一般来说可以按照如下规则设置 Swap 大小:

  • 4G 以内的物理内存,Swap 设置为内存的 2 倍,不超过 4G。
  • 4 - 8G 的物理内存,Swap 等于内存大小。
  • 8 - 64G 的物理内存,Swap 设置为 8G。
  • 64 - 256G 物理内存,Swap 设置为 16G。

实际上,系统中交换分区的大小并不取决于物理内存的量,而是取决于系统中内存的负荷,所以在安装系统时要根据具体的业务来设置 Swap 的值。

系统在什么情况下才会使用 Swap ?

实际上,并不是等所有的物理内存都消耗完毕之后,才去使用 Swap 的空间,什么时候使用是由swappiness 参数值控制。

1
2
cat /proc/sys/vm/swappiness
30

该值在 centos 7 上默认值是 30 ,在 centos 6 上是 60,可以看出新版本的 linux 已经在根据内存大小趋势做出一定的调整。

swappiness=0 的时候表示最大限度使用物理内存,然后才是 Swap 空间,

swappiness=100 的时候表示积极的使用 Swap 分区,并且把内存上的数据及时的搬运到 Swap 空间里面。

现在服务器的内存动不动就是上百G,所以我们可以把这个参数值设置的低一些,让操作系统尽可能的使用物理内存,降低系统对 Swap 的使用,从而提高系统的性能。特别是对于性能要求较高的数据库服务器,要求全部使用内存。

如何查看系统的 Swap 分区?

使用 free 命令即可。

如何修改 swappiness 参数?

临时性修改:

1
2
3
4
sysctl vm.swappiness=10
vm.swappiness = 10
cat /proc/sys/vm/swappiness
10

这里我们的修改已经生效,但是如果我们重启了系统,又会变成系统默认值.

永久修改:

/etc/sysctl.conf 文件里添加如下参数:

1
vm.swappiness=10

然后重启系统。

本文来自:https://blog.csdn.net/sirchenhua/article/details/87861709