使用swap分区解决内存不足问题
文章目录
参考于阿里云文档: 云服务器 ECS Linux SWAP 配置概要说明
开启 SWAP
1、创建用于交换分区的文件:
注:虚拟内存大小建议为物理内存的1.5倍
# dd if=/dev/zero of=/mnt/swap bs=1M count=8192 //创建8g虚拟内存 bs=block_size count=number_of_block
等待稍长时间后输出
8192+0 records in
8192+0 records out
8589934592 bytes (8.6 GB) copied, 55.5164 s, 155 MB/s
2、设置交换分区文件:
# mkswap /mnt/swap
完成后提示
Setting up swapspace version 1, size = 8388604 KiB
no label, UUID=23b4b66c-ef48-4a8a-a8dd-f9e977287932
3、立即启用交换分区文件:
# swapon /mnt/swap
是free指令查看是否生产swap分区
[root@izj6c47bc02i5akvuyb8xzz target]# free -m
total used free shared buff/cache available
Mem: 1839 506 62 24 1270 1137
Swap: 8191 0 8191
注:如果在 /etc/rc.local 中有 swapoff -a 需要修改为 swapon -a
4、设置开机时自启用 SWAP 分区:
需要修改文件 /etc/fstab 中的 SWAP 行
# vim /etc/fstab
末尾添加 /mnt/swap swap swap defaults 0 0
# /etc/fstab
# Created by anaconda on Fri Aug 18 03:51:14 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=59d9ca7b-4f39-4c0c-9334-c56c182076b5 / ext4 defaults 1 1
/mnt/swap swap swap defaults 0 0
注:/mnt/swap 路径可以修改,可以根据创建的 SWAP 文件具体路径来配置。
5、修改 swpapiness 参数
在 Linux 系统中,可以通过查看 /proc/sys/vm/swappiness
内容的值来确定系统对 SWAP 分区的使用原则。当 swappiness 内容的值为 0 时,表示最大限度地使用物理内存,物理内存使用完毕后,才会使用 SWAP 分区。当 swappiness 内容的值为 100 时,表示积极地使用 SWAP 分区,并且把内存中的数据及时地置换到 SWAP 分区。
查看修改前为 0,需要在物理内存使用完毕后才会使用 SWAP 分区:
- 临时修改
假设我们配置为空闲内存少于 10% 时才使用 SWAP 分区:
echo 10 >/proc/sys/vm/swappiness
- 永久修改
若需要永久修改此配置,在系统重启之后也生效的话,可以修改 /etc/sysctl.conf 文件,并增加以下内容:
# vim /etc/sysctl.conf
将配置文件中的vm.swappiness属性值改为10vm.swappiness=10
# sysctl -p
关闭 SWAP
当系统出现内存不足时,开启 SWAP 可能会因频繁换页操作,导致 IO 性能下降。如果要关闭 SWAP,可以采用如下方法。
1、free -m 查询 SWAP 分区设置:
[root@izj6c47bc02i5akvuyb8xzz target]# free -m
total used free shared buff/cache available
Mem: 1839 506 62 24 1270 1137
Swap: 8191 0 8191
2、使用命令 swapoff 关闭 SWAP,比如:
swapoff /mnt/swap
3、修改 /etc/fstab 文件,删除或注释相关配置,取消 SWAP 的自动挂载:
# /etc/fstab
# Created by anaconda on Fri Aug 18 03:51:14 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=59d9ca7b-4f39-4c0c-9334-c56c182076b5 / ext4 defaults 1 1
#/mnt/swap swap swap defaults 0 0
4、 通过 free -m 确认 SWAP 已经关闭。
[root@izj6c47bc02i5akvuyb8xzz target]# free -m
total used free shared buff/cache available
Mem: 1839 506 62 24 1270 1137
Swap: 0 0 0
5、 swappiness 参数调整:
可以使用下述方法临时修改此参数,这里配置为 0%:
echo 0 >/proc/sys/vm/swappiness
若需要永久修改此配置,在系统重启之后也生效的话,可以修改 /etc/sysctl.conf 文件,并增加以下内容:
# vim /etc/sysctl.conf
设置vm.swappiness=0
# sysctl -p