起因

之前的云服务器到期了,这次看阿里新加坡的轻量应用服务器价格不错,就买了。但是到手之后发现如果启动mc服务器,服务器的内存有时会有些不足。大概是因为服务器加载新区块的时候可能会突然增加一些内存需求。然而系统内存不够用,服务端就崩掉了。

此时一般都会想到开swap文件,方便系统在缺内存的时候把一些进程suspend,swap到交换空间里面。然而谁知道阿里的这个破镜像竟然没有自带mkswapswapon这种基础命令。因此需要手动安装。我用debian,所以下面的内容都针对debian(理论上debian系的都一样)

流程

sudo apt reinstall util-linux

然后新建一个4G大小的空文件

sudo fallocate -l 1G /swapfile

或者也可以用dd.

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

bs表示一次操作的字节数。

有空我可以整理一下dd的常见用法。

接着修改权限

sudo chmod 600 /swapfile

然后mkswap

sudo mkswap /swapfile

接下来就可以启用了

sudo swapon /swapfile

调整swappiness

理论上至此应该完成了,但是阿里的镜像中默认把swappiness参数调成了0,这会导致内核根本不会使用swap。所以需要把这个参数调整到大于0的某个值,比如60。数字越高,表示swap使用策略越激进。

sudo sysctl vm.swappiness=50

额外操作

如果要停止使用交换文件,使用swapoff

sudo swapoff -v /swapfile

另外,按上述方式配置,每次服务器重启都得重新手动启动swap。如果要开机自动启用交换文件,可以修改/etc/fstab。添加下面这行,这样每次开机都会自动挂上交换文件。

/swapfile   swap    swap    default 0   0

关于swap的讨论

swap其实并不能完美解决内存不足的问题,一旦涉及到硬盘I/O,很多工作都会变得很慢。不过我的目的只是让mc服务器这个内存占用大户在偶尔需要大量内存的时候,不至于因为内存不足而直接崩掉。那么swap已经让我达到目的了。

参考

本文的内容并非十分的“原创”,参考了以下来源