WordPressのサーバがメモリ不足で落ちたので、SWAP領域を追加して応急処置


はじめに

先日、ブログサイトとして運用していたWordPressのサーバがメモリ不足で落ちたので、実際にやった対処法をご紹介します。
原因は、深夜にヘッダー画像をアップロードしたり、切り取ったりを繰り返していたら、MySQLが死んだみたいです。

EC2 t2.microのインスタンスはWordPressのサーバに使用すると、ぎりぎり落ちるか落ちないかのスペックみたいですね。

# service mysqld status
mysqld dead but subsys locked

tail -100 /var/log/mysqld.log
// 一部抜粋
2017-02-07 16:41:15 17577 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
2017-02-07 16:41:15 17577 [ERROR] Plugin 'InnoDB' init function returned error.
2017-02-07 16:41:15 17577 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2017-02-07 16:41:15 17577 [ERROR] Unknown/unsupported storage engine: InnoDB
2017-02-07 16:41:15 17577 [ERROR] Aborting

インフラ構成

EC2 t2.microインスタンス1台構成
AmazonLinux
Apache2.2 MySQL5.5 PHP5.6

SWAPとは

ハードディスクなどの補助記憶装置を利用して使用可能なメモリ容量を増やすOSの機能の一つ。
ハードディスク上に「スワップファイル」あるいは「スワップ領域」と呼ばれる専用の保存領域を用意して、メモリ容量が不足してきたら現在使われていないプログラム(プロセス)を一時的にスワップファイルに書き出して消去し、占有していたメモリを開放する。メモリからハードディスクに退避する動作を「スワップアウト」(swap-out)、ハードディスクからメモリに書き戻す動作を「スワップイン」(swap-in)という。

http://e-words.jp/w/%E3%82%B9%E3%83%AF%E3%83%83%E3%83%97.html
より引用

作業内容

とりあえずMySQLの再起動を試しましたが、出来ず。

# service mysqld restart
Stopping mysqld:                                           [  OK  ]
Starting mysqld:                                           [FAILED]

freeコマンドで現在のメモリの仕様状況を確認します。

# free
             total       used       free     shared    buffers     cached
Mem:       1019280     560060     459220      54268       9936      96820
-/+ buffers/cache:     453304     565976
Swap:            0          0          0

SWAP領域の追加

ddコマンドで、SWAP用ファイルを作成する。
※中身が0で埋め尽くされた、1Gbyteのswapfile1という名前のファイルができます。

# dd if=/dev/zero of=/swapfile1 bs=1G count=1

パーミッションを設定

# chmod 600 /swapfile1

SWAP領域の作成

# mkswap /swapfile1
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=67eb1ae1-16bf-4ed2-9b4c-3808cd59f6d3

SWAP領域を有効化する

# swapon /swapfile1

freeコマンドでSWAP領域が適用されたことを確認

# free
             total       used       free     shared    buffers     cached
Mem:       1019280     949668      69612      54268       3052     481712
-/+ buffers/cache:     464904     554376
Swap:      1048572          0    1048572

MySQLの起動

# service mysqld start
Starting mysqld:                                           [  OK  ]

終わりに

最初MySQLが再起動出来なかった時、正直めっちゃ焦りました笑
なんとか原因がわかって、対処出来てよかったです。
SWAP領域を確保しておくだけで、ある程度の負荷には耐えられるようになるので、サーバのスペックを変更せずに対処出来てオススメです。

読んでいただきありがとうございました!