Amazon EC2でWordPressを使うなら、t2.small以上を選ぶべき

30078692375_00bb70b9d3_b

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)