在实际的生产环境中,实际的物理内存我们经常会觉得不够用,增加物理内存的成本又比较高,一种折中方案就出来了,使用硬盘的一部分空间来做Swap(windows 下叫虚拟内存),将系统内非活动内存换页到 SWAP,以提高系统可用内存。当然在一些特殊应用(elasticsearch)的话是建议不要使用swap,会导致应用的处理能力都大幅度降低。
创建swap分区
# 预留物理空间
fallocate -l 4G /swapfile #fallocate 比较快点 我们也可以用dd命令 dd if=/dev/zero of=/swapfile bs=1M count=4096
# 设置交换区(swap area)。
mkswap /swapfile
# 更改swap权限
chmod 600 /swapfile
启用swap分区
# 启用swap
swapon /swapfile
# 查看已经启用的swap
swapon -s
# 开机自启swap 分区
vi + /etc/fstab
# 在文件/etc/fstab 添加以下内容
/swapfile swap swap defaults 0 0
# 启动启用 swap
vi + /etc/rc.local
#在文件/etc/rc.local 添加
swapon -a
# 修改 swappiness 参数
在 Linux 系统中,可以通过查看 /proc/sys/vm/swappiness 内容的值来确定系统对 SWAP 分区的使用原则。当swappiness 内容的值为 0 时,表示最大限度地使用物理内存,物理内存使用完毕后,才会使用 SWAP 分区。当swappiness 内容的值为 100 时,表示积极地使用 SWAP 分区,并且把内存中的数据及时地置换到 SWAP 分区。
默认值为 0,表示需要在物理内存使用完毕后才会使用 SWAP 分区:
## 查看默认的swappiness参数
cat /proc/sys/vm/swappiness
## 临时修改
sysctl -w vm.swappiness=10
## 永久修改
vi + /etc/sysctl.conf
# 添加
vm.swappiness=10
## 让配置生效
sysctl -p
删除swap分区
# 关闭使用swap
swapoff /swapfile
删除 /etc/fstab 配置行/swapfile swap swap defaults 0 0
删除配置 /etc/rc.local 配置行 swapon -a
删除配置 /etc/sysctl.conf 配置行 vm.swappiness=10 并使用 sysctl -p 让配置生效
# 删除swap分区
rm -f /swapfile