这个博客自从搬到DO之后就经常性大姨妈,第一次崩溃的时候仍然记忆犹新,不过通常重启MySQL后台服务之后就解决了,当时估计的原因是因内存不够,不过好在解决方案简单无脑,只需要一句:

解决方案简单,便没在意,反正崩溃也只是偶尔出现,一旦收到监控邮件,手机直接SSH上来执行一下这条语句就好了。

不过这两天疯狂的崩溃,我的邮箱经常被监控邮件塞满,着实让人忍无可忍(目测是因为不少人想看卡通农场的预告,访问量激增导致的)

连上SSH,查log,

发现了如下信息:

果不其然,估计是初始化InnoDB buffer pool的时候把内存挤爆了,通过free命令也看到,我的swap空间是0,解决方案也就很自然浮出水面了,无非是:

  1. 加内存
  2. 加SWAP
  3. 减少InnoDB buffer pool的内存占用

当然了,1直接被否了,加到1G内存每月都需要付出多一倍的成本_(:з」∠)_

加SWAP是自然要做的,只怪当年懒,买了之后就一直默认配置……

这个VPS是SSD的硬盘,比传统硬盘的IO性能要高不少,做SWAP自然也会性能更好些,不管了,直接切2G给SWAP,命令如下:

这里面其实主要是dd命令比较复杂,if(input file)后面跟的是输入文件,填/dev/zero的话相当于一个无穷无尽都是0的文件,通常用来给另一个文件做初始化,of(output file)跟的是输出文件名(在当前目录输出),bs等同于同时设置ibs和obs(对应input、output),作为输入输出的缓冲区大小,count用于限制从/dev/zero拷贝的块的数目,算起来swapfile的大小就是count * bs = 2GB。

搞定了之后再free看一下,swap就已经挂上了。

最后呢,就是减少一下InnoDB的buffer pool size,直接去/etc/mysql/my.cnf,给mysqld字段后增加一行

这里我减少到了原来的一半大小,最后重启一下mysql。

目测经过这些更改,应该就不至于再出问题了吧~

说点什么

您将是第一位评论人!

提醒
wpDiscuz