経緯
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
等で検索すると以下のような記事がヒットします。
- MySQLダウン/データベース接続確立エラー その2 : Initializing buffer pool, size = 128.0M InnoDB: mmap(137363456 bytes) failed | yusuke.blog
- サーバーがつながらない。mysqlにつながらない : nymemo
まあ、バッファとか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
で復旧しました。