MySQL が mmap(XXXXXXXX bytes) failed; errno 12 エラーでダウン

経緯

MySQL が以下のエラーでダウンする現象に遭遇。

mmap(XXXXXXXX bytes) failed; errno 12
InnoDB: Cannot allocate memory for the buffer pool

調査

より詳細なログは以下の通り。

# less /var/log/mysqld.log


## 略

YYYY-mm-ddThh:ii:ss.xxxxxxZ 0 [Note] InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M
YYYY-mm-ddThh:ii:ss.xxxxxxZ 0 [ERROR] InnoDB: mmap(XXXXXXXX bytes) failed; errno 12
YYYY-mm-ddThh:ii:ss.xxxxxxZ 0 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
YYYY-mm-ddThh:ii:ss.xxxxxxZ 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
YYYY-mm-ddThh:ii:ss.xxxxxxZ 0 [ERROR] Plugin 'InnoDB' init function returned error.
YYYY-mm-ddThh:ii:ss.xxxxxxZ 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
YYYY-mm-ddThh:ii:ss.xxxxxxZ 0 [ERROR] Failed to initialize plugins.
YYYY-mm-ddThh:ii:ss.xxxxxxZ 0 [ERROR] Aborting

今回はエラー番号が出ているので mysql mmap failed; errno 12 等で検索すると以下のような記事がヒットします。

まあ、バッファとかmmとかあるのでメモリでしょうね、と思っていましたがやはりメモリ不足っぽいですね。

# free -m
             total       used       free     shared    buffers     cached
Mem:          1877       1682        194          0          9         52
-/+ buffers/cache:       1620        256
Swap:         8191       8179         12

試しに free -m すると Swap領域 まで食い尽くしていることが分かります。

対処

今回は試験環境で稼働し続けなければならない環境ではなかったことや、対策を強化するようなものではなかったためとりあえず reboot で復旧しました。

参考

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。