最近,发现网站的数据库连接不上,而且持续有一段时间了。主要还是平时太少管理网站,所以隔了几天才发现。 重启后,数据库恢复正常,但一分钟不到,内存不足,又挂了。 经过排查,原来是没使用swap虚拟内存。开启后,妥妥的稳定运行。
关闭配置文件/etc/fstab
中所有的交换空间
sudo swapoff -a
一、创建交换分区的文件:增加2G大小的交换分区
sudo dd if=/dev/zero of=/var/swapfile bs=1M count=2048
if
代表输入文件。如果不指定if
,默认就会从stdin中读取输入。of
代表输出文件。如果不指定of
,默认就会将stdout作为默认输出。bs
代表字节为单位的块大小。count
代表被复制的块数。/dev/zero
是一个字符设备,会不断返回0值字节(\0)。
块大小可以使用的计量单位表
单位 | 大小 | 代码 |
---|---|---|
字节 | 1B | c |
字节 | 2B | w |
块 | 512B | b |
千字节 | 1024B | k |
兆字节 | 1024KB | M |
吉字节 | 1024MB | G |
二、设置交换分区文件
sudo mkswap /var/swapfile
三、启用交换分区
sudo swapon /var/swapfile
四、写入/etc/fstab
,以便在引导时启用
echo '/var/swapfile swap swap defaults 0 0'>>sudo /etc/fstab
五、查看swap
的情况
扩容或缩容swap内存大小
1、查看swap空间和使用情况
2、关闭swap
3、缩小swap分区
lvreduce -L 1G /var/swapfile
mkswap /var/swapfile
swapon -s
swapon /var/swapfile
swapon -s
4、增大swap分区
新建分区方法来增大swap
dd if=/dev/zero of=/var/swap bs=1G count=10
mkswap /var/swap
swapon /var/swap
swapon -s
free -m
重启系统以后swap还是会变回去,这里需要修改/etc/fstab
增加:/var/swap swap swap default 0 0
删除之前的swap分区
swapoff /var/swapfile
rm -rf /var/swapfile
echo "/var/swap swap swap default 0 0" >>/etc/fstab
修改swappiness
swappiness参数值说明
vm.swappiness = 0 仅在内存不足的情况下--当剩余空闲内存低于vm.min_free_kbytes limit时,使用交换空间。
vm.swappiness = 1 内核版本3.5及以上、Red Hat内核版本2.6.32-303及以上,进行最少量的交换,而不禁用交换。
vm.swappiness = 10当系统存在足够内存时,推荐设置为该值以提高性能。
vm.swappiness = 30默认值
vm.swappiness = 100 内核将积极的使用交换空间
# sysctl -q vm.swappiness
或者
# sysctl -a | grep vm.swappiness 查看swappiness
vm.swappiness = 30
# echo 10 > /proc/sys/vm/swappiness 临时修改
# sysctl -a | grep vm.swappiness
# vm.swappiness = 10
# sysctl -w vm.swappiness=10 临时修改
vm.swappiness = 10
# cat /proc/sys/vm/swappiness
在/etc/sysctl.conf中编辑,增加如下参数(如果存在的话)
vm.swappiness = 10 永久修改
激活设置:sysctl -p