前言
swap分区是linux系统中一块特殊的硬盘空间,当实际内存不够用的时候,系统会按照一定的算法将部分不用的数据放在swap分区中,从而为当前运行的程序腾出足够的内存空间。好处在于避免内存资源不足导致的OOM(out of memory),缺点是会极大程度影响到运行在swap分区的程序的性能。
创建swap分区
一般在系统安装的时候就会创建交换分区,如果没有,可以按照以下步骤进行创建。
方式一
- 假设有块硬盘
/dev/sdb
- 先使用fdisk对
/dev/sdb
进行分区,分区后的/dev/sdb1
作为swap分区 mkswap /dev/sdb1
- 加载新的swap:
swapon /dev/sdb1
- 永久生效:编辑
/etc/fstab
,增加一行:
/dev/sdb1 swap swap defaults 0 0
方式二:使用文件制作swap分区
- 先创建一个4G的文件
dd if=/dev/zero bs=4M count=1024 of=/swapfile
- 修改文件权限:
chmod 600 /swapfile
- 加载:
mkswap /swapfile
- 启用:
swapon /swapfile
- 永久生效:编辑
/etc/fstab
,增加一行:
/swapfile swap swap defaults 0 0
扩容swap分区
扩容步骤同创建swap分区
关闭swap
如果内存资源足够的话,建议关闭swap分区,避免影响程序性能
- 临时关闭:
swapoff -a
- 永久关闭:编辑
/etc/fstab
文件,注释swap相关行
swap分区使用倾向性
对于swap分区的使用需要根据实际情况来判断,有的应用即便性能低下,但也尽量别OOM,这样的话swap分区就很有必要;有的应用性能低下的话等于没法用,还不如oom,这种情况下就可以直接关了swap。
如果内存资源够用,但不是特别充足,不想让程序运行在swap分区,但又不想让程序oom,这时候就可以通过设置vm.swappiness
参数,降低系统对swap分区的使用倾向性。默认情况下(centos 7),vm.swappiness
参数的值为60。值越低,使用swap的倾向性就越低。
个人一般设置为vm.swappiness=0
,将swap分区使用倾向性调为最低。注意,vm.swappiness=0
表示尽可能不用swap分区,并不意味着一定不会用到swap分区。
- 编辑
/etc/sysctl.conf
文件,增加一行
vm.swappiness=0
- 生效:
sysctl -p