EC2・nginx・php-fpmで構築したWordPressサイトが頻繁に落ちるため、Nginxのエラーログを調査して、PHPが【Out of Memory】というエラーをはいていたことが判明しました。
自分への備忘録と、同じような状況になっている人への助けになれば良いと思い、私が対応した方法を紹介したいと思います。
エラー状況
結論から言うと、【Out of Memory】というエラーメッセージと共にサーバーが応答しなくなっていたため、メモリ不足でした。
AWSのt2.microを利用しているとはいえ、大してアクセス数の多くないWordpressサイトが落ちるのはおかしいと思い、試しに自分でF5攻撃してみたところ、10秒以上F5アタックすると見事にサーバーがメモリリークを起こしました笑
「1つのパソコンのF5攻撃10秒で、サイトが表示されなくなる」
なんて、万が一記事がバズった時に一発でアウトです。
メモリリークした理由
大量のアクセスが同時に来た時にメモリが足りなくなる理由を調べたところ、php-fpmが処理のたびにプロセスを自動で増やしてしまい、一定以上のアクセスが来るとメモリを使い果たすことがわかりました。
デフォルトの設定で、自動でプロセスを増やしてしまうので、
「Wordpress EC2 nginx」
とかで検索し、EC2でWordpressサイトを作った人は同じ状況になる可能性があります。
対応方法
取り急ぎの対応として、php-fpmの設定ファイルを変更して、
- 自動でプロセスを増やさない
- プロセスの上限数を決める
という対応をしました。
詳細に書くと、「/etc/php-fpm/www.conf」というphp-fpmの設定ファイルを以下のように修正します。
1 2 3 |
pm = dynamic ↓ pm = static |
→自動スケールをやめる
1 2 3 |
pm.max_children = 50 ↓ pm.max_children = 10 |
プロセスの上限数を減らす。
結果
上記の対応を行ったところ、とりあえず1人のF5攻撃じゃ落ちないところまで来ましたし、通常運用でサイトが表示されなくなることはなくなりました。
インフラは初心者でわからないことが多すぎて、こんな簡単なエラーでも四苦八苦しますが、すこしずつサーバーの仕組みがわかっていくと信じて、これからも楽しみながらサービス運営していこうと思います!