1. 看着业务和钱包我对Swap交换分区的思考及实战配置

2. 前言

Linux系统中物理内存不足时,操作系统会将运行中的程序(比较闲的程序)暂时拿到交换分区(Swap)中,以保证物理内存来运行其它程序。等Swap中的程序要运行时,再从Swap分区中恢复保存的数据到内存中。

3. 使用背景

现在服务器内存越来越大,动不动就16G、32G、64G甚至上百G,操作系统官网也给建议尽量使用系统物理内存,交换分区(SWAP)在应用中所占的比例越来越小,甚至不使用了。

可是对于个人、小个体甚至小微企业来说服务器的费用还是能省则省,内存已然捉襟见肘。本人有一台1核/2G的服务器和一台2核/4G的服务器,部署了五六个应用后就到极限了,动不动就崩溃了。

特别在微服务大行其道的今天,一个项目上去内存就沾满了。所以,再嚼嚼交换分区,一切为了钱。

4. Swap分区大小选择

Swap分区大小设置的建议:

  1. 物理内存小于2GB,Swap建议为物理内存的2倍;
  2. 物理内存2GB~8GB,Swap分区大小等于物理内存;
  3. 物理内存8GB~64GB,Swap分区大小最小为8G;
  4. 物理内存大于64GB,Swap分区至少为16G;

事实上,Swap分区的大小并不取决于物理内存的量,而是根据业务场景,客户需求和系统中内存的负荷,所以抛开业务场景、显示来谈Swap意义并不大;如果我的服务器内存很大,也不会瞎折腾O(∩_∩)O哈哈~

5. 何时使用Swap

不是等所有的物理内存都消耗完毕之后,才会去使用Swap的空间,什么时候使用是由swappiness参数值控制及系统调度的。

目前云服务器的Swap起始状态都是0,swappiness也为0,这就表示只能使用物理内存,如下图:

cat /proc/sys/vm/swappiness

该值在CentOS 6上是60,在CentOS 7上建议是30,可以看出随着硬件的降价,交换分区的比重越来越轻了。

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

现在生产服务器用户动不动上百万,内存上百G,对用户体验,相应速度都要求极高,我们可以降低系统对Swap的使用,甚至全部使用内存。

6. 如何修改swappiness参数

6.1. 临时性修改,系统重启回复默认

sysctl vm.swappiness=10

cat /proc/sys/vm/swappiness

6.2. 永久修改,重启生效

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

vm.swappiness=10

# 加载配置
sysctl -p

7. 创建交换分区

云服务器默认交换分区为0,默认只使用物理内存;我的小服务器只能手动设置开启交换分区咯!下面是创建并使用交换分区的步骤。

7.1. 创建Swap分区

/dev/zero文件代表一个永远输出0的设备文件,可以用它来创建空文件。后两个参数可以控制文件大小。

dd if=/dev/zero of=/mnt/swap bs=512 count=8388616

我的服务器内存为4G,根据建议Swap大小设置为4G,创建过程有点慢,需要耐心等待。

注意:创建swap大小为bs*count=4294971392(4G)

7.2. 格式化swap文件

mkswap /mnt/swap

7.3. 启用swap文件(上文已提到)

  • 临时调整

    sysctl -w vm.swappiness=60
    
  • 永久调整,需要重启服务器 ``` vim /etc/sysctl.conf vm.swappiness=60

8. 加载配置

sysctl -p


## 激活使用这个swap文件
- 激活swap文件

swapon /mnt/swap


<div align="center">
    <img src="/assets/images/part7/1/1/3/7.png">
</div>


- 设置自动挂载交换分区

echo "/mnt/swap swap swap defaults 0 0" >> /etc/fstab


## 查看交换分区状态

swapon -s

free -m


<div align="center">
    <img src="/assets/images/part7/1/1/3/8.png">
</div>

可以看到,系统并没有使用到我创建的交换空间,我的物理内存还剩1G,后面跑下程序试试。



# 删除交换分区
## 停止交换分区

swapoff /mnt/swapfile



## 删除/etc/fstab中的自动挂载

vim /etc/fstab

9. 注释或删除掉

10. /mnt/swapfile swap swap defaults 0 0


## 删除分区文件

rm /mnt/swapfile

```

11. 总结

swappiness的值为0~100,我的CentOS 7设置为60,也就是内存使用到40%就会使用交换分区。

如果业务、经济允许,还是使用物理内存好,毕竟内存速度比磁盘快得多;同时交换分区如果经常大量使用,会造加大系统io开销,所以该升级内存升级内存,该调整参数调整参数。

另外有一种说法,使用交换分区(Swap)会缩短硬盘使用寿命,这个没验证过,同时我是用的是云服务器,无所谓了。

Copyright © 神都花已开 2021 all right reserved,powered by Gitbook修订时间: 2021-11-01 15:05:12

results matching ""

    No results matching ""