Linux SWAP交换分区应该设置多大?

Posted 七月的小尾巴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux SWAP交换分区应该设置多大?相关的知识,希望对你有一定的参考价值。

前言

在我们使用Linux命令查看内存空间的时候,会看到有swap数据,那么swap究竟是什么的?他起到什么作用呢?

在这里插入图片描述
swap的作用

我们在安装系统的时候已经建立了 swap 分区。swap 分区通常被称为交换分区,这是一块特殊的硬盘空间,即当实际内存不够用的时候,操作系统会从内存中取出一部分暂时不用的数据,放在交换分区中,从而为当前运行的程序腾出足够的内存空间。

也就是说,当内存不够用时,我们使用 swap 分区来临时顶替。这种“拆东墙,补西墙”的方式应用于几乎所有的操作系统中。

使用 swap 交换分区,显著的优点是,通过操作系统的调度,应用程序实际可以使用的内存空间将远远超过系统的物理内存。由于硬盘空间的价格远比 RAM 要低,因此这种方式无疑是经济实惠的。当然,频繁地读写硬盘,会显著降低操作系统的运行速率,这也是使用 swap 交换分区最大的限制。

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

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

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

在这里插入图片描述

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

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

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

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

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

cat /proc/sys/vm/swappiness

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

  1. swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,
  2. swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。

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

如何查看系统的SWAP分区?

free 命令

如何修改swappiness参数?

临时性修改

sysctl vm.swappiness=10

vm.swappiness = 10

cat /proc/sys/vm/swappiness

10

永久性修改

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

vm.swappiness=10

然后重启系统。

个人理解,如有不对欢迎随时讨论:

在网上找了很多关于swap的资料,于是结合自己的理解整理了一下:

  1. swap类似于windows的虚拟内存,当内存不足的时候,把一部分硬盘空间虚拟成内存可用。因此swap扩大的不是内存,只不过是把硬盘的空间一部分当内存用。
  2. 由于内存和硬盘的读写速度不同,内存至少比硬盘块100倍以上,如果用了swap。就不是单纯使用内存了 他会在内存不足时自动使用硬盘来填充部分,这等于说吧内存的整体速度拖慢了。虽然扩大了感知上的可使用内存。但是效率变低了。
  3. 现在的服务器的话。内存都是16G。32G,甚至更好,基本够用了。所以为了追求速度。不会使用这个swap技术了,通常线上的服务器不会开启swap。

以上是关于Linux SWAP交换分区应该设置多大?的主要内容,如果未能解决你的问题,请参考以下文章

Linux交换空间(swap space)

centos 创建swap 交换分区

Linux下怎样增加虚拟内存

linux设置开启swap交换分区基本命令(虚拟内存)

Linux SWAP交换分区大小设置

Linux 7.7设置交换分区SWAP