
MySQLが死ぬ
某案件で、Amazon EC2上にWordPressを使ったサイトを構築したのですが、スペック上キツかったというお話。
プランはt2.micro、メモリは1GBです。
Apache + MySQLという単純な構成なので、microで十分でしょwと思ったら、そうは行きませんでした。
メモリ不足でMySQLが死にます。
同時アクセス数が云々というレベルではなく、開発のために2〜3人でアクセスするだけで死にます。
画面にはでかでかとデータベース接続エラーの文字が。
いやいや、お前のせいで死んだんちゃうんかい!と突っ込んでも仕方ありません。
解決のために少々悪あがきをしてみました。
Nginxに変える
apacheやMySQLをカリカリにチューニングするような技量はありませんので、素直にWebサーバーをNginxに変更しました。
ここで改めてapacheとNginxの違いを確認してみましょう。
こちらのページから引用します。
Apache
マルチプロセスモデル : 接続ごとにプロセスをフォークするのでメモリがいっぱいになりやすい
Nginx
イベント駆動モデル : 1プロセス内で、接続ごとにイベント処理を行う。1プロセス1CPUなので、CPUの数だけワーカープロセスが作成できる。
というわけで、Nginxにすることでプロセス数を減らせる→メモリ消費量を減らせると見込んだわけです。
結果はまずまずといったところ。
サイトにアクセスする程度では落ちなくなりました。
しかし、定番のJetpackのプラグインを弄っていると落ちることがあります。
プラグインは、ものによっては結構メモリを食うみたいですね。
swap領域を作る
t2.microでは、メモリのswap領域がありません。
すなわち仮想メモリが無いため、実メモリを食いつぶすと即死亡です。
無いなら作っちゃえば良いじゃない!ということで、こちらのページを参考にswap領域を作成してみました。
AWS(EC2インスタンス)にSwap(スワップ)領域を作成する方法 | CODE:Materialize
まあ、たしかにswap領域は出来ました。
出来ましたが削除しました。
なぜかと言えば、本来のt2.microの使い方ではないから。
ここまでするなら、余程の理由がない限りはt2.smallにプランを変更したほうが良いと思います。
…というわけで、簡単・手軽なWordPressですが、せめてメモリは2GBはあった方が良いよというお話でした。
ちなみに今もt2.microで騙し騙し運用中です。
まあそこまでアクセスの多いサイトではないので、大丈夫かなと…問題があればおとなしくt2.smallにします。
というわけで今回は以上!
photo credit: rcmd_fprank_10_1 8397419126.jpg via photopin (license)