为Ubuntu Linux创建Swap分区

前不久在Amazon购买了一台EC2服务器运行WordPress,配置为双核CPU,内存1G。运行了一段时间后,发现mysql经常崩溃。检查mysql的error.log发现,崩溃前最后一条日志是:

160328 16:50:26 InnoDB: Completed initialization of buffer pool
160328 16:50:26 InnoDB: Fatal error: cannot allocate memory for the buffer pool
160328 16:50:26 [ERROR] Plugin 'InnoDB' init function returned error.
160328 16:50:26 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
160328 16:50:26 [ERROR] Unknown/unsupported storage engine: InnoDB
160328 16:50:26 [ERROR] Aborting

因为网站访问量比较大,推测可能是系统内存不足导致的。使用下面的命令查看了一下,发现apache已经使用了60%多的内存(总内存为1G)。

$ ps -ylC apache2 | awk '{x += $8;y += 1} END {print "Total (MB): "x/1024; print "Average (MB): "x/((y-1)*1024)}'

Total (MB): 622.996
Average (MB): 14.8332

apache、mysql都是吃内存的大户,1G屋里内存显然不够用了。使用swapon查看交换文件状态:

$ sudo swapon -s

Filename                Type        Size    Used    Priority

OMG,竟然没有。。。那就创建一个。

先创建一个4G的文件:

$ sudo dd if=/dev/zero of=/swapfile bs=1M count=4000
4000+0 records in
4000+0 records out
4194304000 bytes (4.2 GB) copied, 5.12 s, 1203 MB/s

然后把它转变为swap文件:

$ sudo mkswap /swapfile
Setting upswapfile version 1, size = 4095996 KiB no label, UUID=069d83cf-2b91-420e-a2dc-4f7a58a4f520

激活swap文件:

$ sudo swapon /swapfile

确认激活成功:

$ cat /proc/swaps
Filename Type Size Used Priority
/swapfile file 4095996 0 -1

打开/etc/fstab,在结尾加上下面这一行,确保系统重启后会自动激活swap:

$ sudo vi /etc/fstab
/swapfile none swap defaults 0 0

OK,大功告成。

发表评论

电子邮件地址不会被公开。 必填项已用*标注