设置Linux的Swap交换分区
有的时候Linux服务器运行时出现卡顿卡死的,或者已知内存不足够支持所有业务的运行,这时建议设置一点Swap交换分区。Swap交换分区可以将内存中暂时用不到的数据放到硬盘上,以提高内存的使用效率,解决因为内存溢出出现的卡顿卡死现象。
很多人其实喜欢将Linux的服务器的所有性能都压榨出来,这就要求将内存正好用得满满当当的,不设置swaq分区的目的也是为了让系统更快运行。不过,我更喜欢设置一点swap分区,因为很难讲业务需要的内存大小计算的很精确,如果余量没有留足够,又没有swap分区,这时系统可能会卡死,后果更严重。因此,我个人的建议是,用满内存,但是还是要设置一点swap分区,1-2个G足够了,在内存被用到极限的边缘情况下,保持系统不卡死。
请先阅读这篇文章,学习swappiness参数的含义和设置:Linux SWAP交换分区应该设置多大?
开始设置Swap分区:
$ dd if=/dev/zero of=/swap bs=1024M count=2
使用dd命令,利用/dev/zero伪文件,生成一个根目录下的swap文件,大小2G;bs表示大小,count表示块数。
有时会出现这样的错误,dd: memory exhausted by input buffer of size xxxxxxxx bytes.....这是由于bs设置的过大,超过了系统内存,修改的方法就是将bs参数设置小一点,同时把count参数设置大一点,只要两者的乘机不变就OK。比如,我们可以把刚才那条命令修改为:
dd if=/dev/zero of=/swap bs=256M count=8
$ dd if=/dev/zero of=/swap bs=128M count=16
效果都是一样的!这个命令执行需要点时间,创建的swap文件越大,时间越长。
然后,将刚才创建的文件格式化成swap格式:
$ mkswap /swap
这时就可以激活swap分区了:
$ swapon /swap
这时系统会提示刚加载的swap文件的权限不安全,建议从0644修改为0600,使用这个命令修改:sudo chmod 0600 swap
卸载/swap分区:
swapoff /swap
要想在系统启动的时候,自动加载/swap分区,需要修改/etc/fstab文件,在这个文件中增加一行:
/swap swap swap defaults 0 0
xinlin@iZ239r252v4Z:~ cat /etc/fstab
<pre style="padding: 0px; margin: 1em 0px; box-sizing: content-box; font-family: Courier, monospace, serif; font-size: 15px; white-space: pre-wrap; overflow-wrap: break-word;"># /etc/fstab: static file system information.
Use 'blkid' to print the universally unique identifier for a
device; this may be used with UUID= as a more robust way to name devices
that works even if disks are added and removed. See fstab(5).
<file system> <mount point> <type> <options> <dump> <pass>
/ was on /dev/vda1 during installation
UUID=93d70461-bd51-4276-8e7a-ca984d1af386 / ext4 errors=remount-ro 0 1
/dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0
/swap swap swap defaults 0 0</pre>
查看swap分区的命令:swapon -s
这个命令可以看到详细的swap分区信息,相比只看总量的free命令,这个命令能看明细。
总的来说,在Linux系统下设置swap交换分区的操作还是比较简单的,关键是要理解其中各种参数的概念。