问题描述
腾讯云学生优惠服务器在部署Wordpress项目后频繁出现Mysql崩溃情况,翻阅日志发现报错信息InnoDB: mmap (x bytes) failed; errno 12,通过Google最终在StackOverFlow找到解决方案。
问题原因:
云服务物理内存不足,且默认没有设置Swap分区(据了解腾讯云,阿里云,Amazon等均无),Mysql无法申请到足够的内存。
解决方案:使用文件创建Swap
//在终端中执行以下操作
dd if=/dev/zero of=/swapfile bs=1M count=1024
mkswap /swapfile
swapon /swapfile
//可能会提示`swapon: /swapfile:不安全的权限 0644,建议使用 0600`,无需理会
//参考步骤: `vim /etc/fstab`...
在/etc/fstab中添加行/swapfile swap swap defaults 0 0
//参考步骤:`systemctl restart mariadb`
重启mysql服务
Swap作用:
一般来说,如果硬件的配备资源足够的话,那么 swap 应该不会被我们的系统所使用到, swap 会被利用到的时刻通常就是实体内存不足的情况了。从第零章的计算机概论当中,我们知道 CPU 所读取的数据都来自于内存, 那当内存不足的时候,为了让后续的程序可以顺利的运行,因此在内存中暂不使用的程序与数据就会被挪到 swap 中了。 此时内存就会空出来给需要执行的程序载入。由于 swap 是用磁盘来暂时放置内存中的信息,所以用到 swap 时,你的主机磁盘灯就会开始闪个不停啊!
虽然目前(2015)主机的内存都很大,至少都有 4GB 以上啰!因此在个人使用上,你不要设置 swap 在你的 Linux 应该也没有什么太大的问题。 不过服务器可就不这么想了~由于你不会知道何时会有大量来自网络的要求,因此最好还是能够预留一些 swap 来缓冲一下系统的内存用量! 至少达到“备而不用”的地步啊!如果是在实体分区无法支持的环境下,此时前一小节提到的 loop 设备创建方法就派的上用场啦! 与实体分区不一样的,这个方法只是利用 dd 去创建一个大文件而已。
——引自《鸟哥的linux私房菜》