Ubuntu修改swap交换空间

新安装的Ubuntu 12.04 VPS内存为512M,安装完MySQL运行一段时间后会出现MySQL停止运行的情况,查看MySQL的错误日志后发现是内存不足。然后用free命令查看系统内存,发现内存已基本耗尽,而且swap区大小为0。由于网站访问量并不大,暂时用增加swap区来解决内存不足的问题。

Digital Ocean提供了这方面的教程:How To Add Swap on Ubuntu 12.04

查看swap空间使用情况

sudo swapon -s

由于VPS上面没有使用swap,得出的结果是一个空的列表:

Filename    Type    Size    Used    Priority

查看硬盘使用情况

df -lh

这是服务器上的输出,可以看到还有17G的可用空间,有足够的空间去分配swap空间了。

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda 20G 2.1G 17G 11% /
udev 237M 12K 237M 1% /dev
tmpfs 99M 228K 98M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 246M 0 246M 0% /run/shm

创建并启用swap文件

sudo dd if=/dev/zero of=/swapfile bs=1024 count=512k

这样就创建了一个512M的swap文件,文件名是swapfile,放在根目录下。如果想要更大的swap空间,可以将上述命令中的512改为合适的值。 接着创建swap交换区。

sudo mkswap /swapfile

根据文件大小,需要稍等一会才能执行完毕。执行完后可以看到类似的输出:

Setting up swapspace version 1, size = 262140 KiB
no label, UUID=103c4545-5fc5-47f3-a8b3-dfbdb64fd7eb

激活交换文件:

sudo swapon /swapfile

查看swap空间使用情况:

sudo swapon -s

激活成功后的输出结果是:

Filename        Type        Size    Used    Priority
/swapfile file 524284 38936 -1

设置开机自动挂载swap文件

这样设置完,重启服务器后,swap交换区的信息将丢失。修改/etc/fstab文件可以实现开机自动挂载。

sudo vi /etc/fstab

在文件最下面添加:

/swapfile       none    swap    sw      0       0

修改swappiness参数,提高swap交换区性能

echo 0 | sudo tee /proc/sys/vm/swappiness
echo vm.swappiness = 0 | sudo tee -a /etc/sysctl.conf

设置为0后,swap仅在内存不足的时候才会使用,这样可以提高性能。

设置swap文件访问权限

sudo chown root:root /swapfile 
sudo chmod 0600 /swapfile

这样只有root用户才能对swap有读写权限。