這是一個非常的大的坑,差點就被坑懵逼了。因為一開始你不知道這個錯誤從何而來,你無從下手。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 cachedMem: 608476 601432 7044 0 824 88752-/+ buffers/cache: 511856 96620Swap: 1048572 0 1048572
添加後,再次free查看內存情況,這下我們就能看swap內存。最後重新啟動mysql,mysql就能啟動成功,項目正常運行。