はじめに
先日、ブログサイトとして運用していた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領域を確保しておくだけで、ある程度の負荷には耐えられるようになるので、サーバのスペックを変更せずに対処出来てオススメです。
読んでいただきありがとうございました!