本文最后更新于2019年03月19日,共890字。如有问题或建议,欢迎在文章底部留言参与讨论!

以前使用VPS编译安装LNMP的时候经常因为内存过小导致安装失败,究其原因原来是安装时内存不足导致内存溢出所致,后来在添加了Swap交换分区后才算完成了LNMP的安装。虽然Swap分区的I/O读写速度远不及物理内存,但对于小内存的VPS来说,添加适当的Swap分区还是很有必要的。现就我VPS添加Swap分区的过程做个记录。

百科中关于Swap分区的解释:Swap分区是在系统的物理内存不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。

简单来说,当VPS的物理内存不够用时,系统会占用一部分Swap分区作为临时内存,目的是防止因物理内存耗尽而可能出现的错误。

但是,由于硬盘的I/O读写速度远不能和内存的读写速度相提并论(可能相差几十倍),使用Swap交换分区时,系统可能会变得特别缓慢、卡顿,甚至程序会出现错误。

因此,要尽量避免使用Swap分区,不得不使用时也不宜设置过大(大了也没用还占用空间),也就是说我们不能指望用Swap来代替物理内存使用。甚至于,当你的VPS物理内存很充足时,完全可以禁用Swap以提高VPS的响应速度。

添加Swap交换分区

使用root用户登陆SSH,先查看是否已经添加了Swap分区:

free -m

若显示为 Swap = 0 的话,表明没有添加。否则,说明系统已自带Swap交换分区。

下面为添加Swap交换分区的过程 ↓

进入挂载目录(/mnt/):

cd /mnt/

获取1024MB的文件块(一般设置为与内存相等即可):

dd if=/dev/zero of=swapfile bs=1M count=1024

创建Swap文件:

/sbin/mkswap swapfile

激活Swap文件:

/sbin/swapon swapfile

为了安全,建议修改一下权限:

chown root:root /mnt/swapfile
chmod 0600 /mnt/swapfile

将swapfile添加到fstab文件中,开机自动启动:

echo "/mnt/swapfile swap swap defaults 0 0" >> /etc/fstab

添加完成。此时查看内存信息:

free -m

出现 Swap: xxx 字样表示设置成功。

修改 swappiness 默认值

上面说了,我们要尽量避免使用Swap分区。所以,这里我们需要额外做些修改,使系统尽可能的优先使用物理内存。

首先查看下 swappiness 的默认值:

cat /proc/sys/vm/swappiness

通常,返回值是 30

实际上,swappiness = 0 表示最大限度使用物理内存,然后才使用swap分区;swappiness = 100 表示系统积极的使用swap分区,然后才使用物理内存。

显然,这里我们需要降低 swappiness 的默认值。

vi /etc/sysctl.conf

在里面添加 vm.swappiness = 10 字段,然后退出保存。

或者:

echo "vm.swappiness = 10" >> /etc/sysctl.conf

然后 reboot 一下VPS即可。

如操作过程中提示 "swapoff failed: Cannot allocate memory" 错误,表示swapoff失败,无法分配内存。由于更改Swap配置也是需要内存的,所以,如果目前VPS内存不够用,就会出现此类错误。

解决办法很简单,关闭其他程序释放内存即可,比如关闭LNMP:lnmp stop

创建完成之后,再重启LNMP:lnmp start

删除/重置Swap交换分区

若系统已设置Swap,但是需要对其做出更改的话,可以先将其删除。

首先查看Swap位置:

swapon -s

比如显示为 /mnt/swapfile,则停止并删除swap:

/sbin/swapoff /mnt/swapfile
rm -rf /mnt/swapfile

然后,将其开机启动删除:

vi /etc/fstab

/mnt/swapfile swap swap defaults 0 0 该行删除,然后保存退出。

如有需要,删除后可重新添加适合的Swap分区。

文章目录