swap分区大小说明
一般来说可以按照如下规则设置swap大小:
4G以内的物理内存,SWAP 设置为内存的2倍。
4-8G的物理内存,SWAP 等于内存大小。
8-64G 的物理内存,SWAP 设置为8G。
64-256G物理内存,SWAP 设置为16G。
实际上,系统中交换分区的大小并不取决于物理内存的量,而是取决于系统中内存的负荷,所以在安装系统时要根据具体的业务来设置SWAP的值。
一般Linux桌面系统的SWAP设置的会相对大一点,而Linux服务器,特别是生产环境,SWAP可能只有一点点,1-2G,很多甚至都没有SWAP。
添加swap交换分区空间
1.查看当前内存和swap空间大小
free -mh
2.创建swap交换分区文件/swap/swapfile,大小为8G
sudo mkdir /swap
sudo dd if=/dev/zero of=/swap/swapfile bs=1G count=8
3.格式化swap分区:
sudo mkswap /swap/swapfile
4.设置交换分区:
sudo mkswap -f /swap/swapfile
5.修改权限:
sudo chmod 600 /swap/swapfile
6.激活swap分区:
sudo swapon /swap/swapfile
6.设为开机自动启用:
sudo vi /etc/fstab
在该文件底部添加如下内容:
/swap/swapfile swap swap default 0 0
注意:要执行格式化swap分区这一步骤,否则出现无法激活的问题。
尽量避免使用Swap交换分区
使用swap会不断换入换出,导致本地磁盘IO增加,影响访问速度。所以在内存充足的情况下,如果我们觉得不需要使用swap分区的时候,那就要想办法尽量避免使用swap。 设置swappiness=1,在不得已的情况下才使用swap分区。
查看当前参数:
cat /proc/sys/vm/swappiness
临时性修改:
sysctl vm.swappiness=1
永久修改:
vi /etc/sysctl.conf
vm.swappiness=1
#保存退出后执行下面代码生效
sysctl -p
附:删除swap交换分区
1.查询swap分区文件:
swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 2097148 685964 -1
1.停止正在使用的swap分区:
swapoff /dev/dm-1
2.删除swap分区文件:
rm /dev/dm-1
3.删除或注释在/etc/fstab文件中的以下开机自动挂载内容:
/dev/mapper/centos-swap swap swap default 0 0
彻底关闭swap分区方法:
swapoff -a
关于使用原则。
对于 Swap 的空间使用,取决于两点。
一是想要得到的结果:
①在集群下,不希望出现任何抖动/增加延迟/出现慢响应,系统有横向伸缩的能力,可以完全严格不使用 Swap。死掉了再排查原因。避免出现将死不死最为致命的场景,死掉还好说有集群其他节点提供服务,业务基本无感知,而阻塞缺会影响调用链的部分流程挂起,引发其他流程占用资源,甚至集群雪崩。
②是不希望系统发生 OOM,利用任何可利用的资源使系统能够维持运转,能够撑过一些小高峰,可以有选择的利用 Swap。
二是系统的目的:
①要求及时响应的系统趋向尽量避免使用 Swap。
②应用层原意使用内存加速尽量避免使用 Swap,例如:Mysql 内存索引、Redis,触发磁盘 IO 破坏原意。
③系统用来做大量计算,不需要及时响应,可适当利用 Swap 增加吞吐量。Swap 的大小可直接影响系统允许 overcommit 的大小,从而直接决定可以起更多的进程,可以申请更多的匿名页,overcommit 的大小也可以为增加内存提供参考。
④如果你选择关闭 Swap,上述已经可以看到 Swappiness=0 也并不代表关闭 swap,请直接干掉 swap 分区。
使用建议
关于swap的使用建议,针对不同负载状态的系统是不一样的。有时我们希望swap大一些,可以在内存不够用的时候不至于触发oom-killer导致某些关键进程被杀掉(比如我遇到过tomcat进程被杀,但是tomcat没有任何异常日志),比如数据库业务。
也有时候我们希望不要swap,因为当大量进程爆发增长导致内存爆掉之后,会因为swap导致IO跑死,整个系统都卡住,无法登录,无法处理。当tomcat出现假死/宕机/挂起,比直接被杀掉更致命,因为tomcat被杀还有其他节点,假死会导致一批请求进来没响应。
这时候我们就希望不要swap,即使出现oom-killer也造成不了太大影响,但是不能允许服务器因为IO卡死像多米诺骨牌一样全部死机,而且无法登陆。跑cpu运算的无状态的apache就是类似这样的进程池架构的程序。