这是一个非常的大的坑,差点就被坑懵逼了。因为一开始你不知道这个错误从何而来,你无从下手。2018-09-29T03:53:09.373370Z 0 [Error] mmap(137428992 bytes) failed; errno 12这样一行错误,我是从mysql日志中找到的。先说一下我们部署项目的经过吧,我部署的是一个Spring boot的项目,要部署在一个有java集成环境的服务器上。我已经在Linux上创建了war文件,当然这其中也是踩过很多坑的。错误经历的过了,你也就一点点在成长,我们报着感恩的心感谢那些bug让我变得强大。

闲话不多少,为什么这是一个坑呢,因为这个报错不是正面报错,而是侧面的报了个这样的错误:Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.最后我还是mysql日志文件中才找到真的错误,是swap内存问题。当初我的目的呢就是把那个生成的war文件部署到正式环境上去,但是当我在启动mysql(systemctl restart mysqld)的时候呢,服务器给我报了一个上面的错误。

雷小天博客

这个错误呢,就是告诉你mysql启动失败,提示你,分别使用systemctl status mysqld.service和journalctl -xe查看服务启动失败的原因。但是这个命令,我查阅了资料,还是不能知道出错真的原因是什么。

雷小天博客

最后从mysql日志(/var/log/mysqld.log)找到了问题的所在,有一行这样的错误[Error] mmap(137428992 bytes) failed; errno 12。在这个文件中记录的所有的日志,为了方面查询错误,我们可以先删除,然后重新启动mysql它又会生成,这样文件篇幅简单我们也便于查看。然后free查看内存,你会发现swap为0。

雷小天博客

说到这里,很明显是swap内存的问题了。既然swap为0那我们就增加swap内存进去,这里我们添加1G swap为例。

$ sudo dd if=/dev/zero of=/swapfile bs=1M count=1024 #增加1G的SWAP进去
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
$ free
             total       used       free     shared    buffers     cached
Mem:        608476     601432       7044          0        824      88752
-/+ buffers/cache:     511856      96620
Swap:      1048572          0    1048572

添加后,再次free查看内存情况,这下我们就能看swap内存。最后重新启动mysql,mysql就能启动成功,项目正常运行。

雷小天博客