AWSのEC2無料インスタンスでwordpressを運用していたのですが、急にブラウザからのアクセスが全て「404 Not Found」という表示になってしい、原因を確認しようとしてサーバにSSH接続しても接続エラーになってしうということがありました。その時の原因と対象を紹介します。

まずはAWSのインスタンスを再起動

EC2ダッシュボードのインスタンス画面から、対象サーバのインスタンスを再起動します。これでいったん復旧しました。

原因はメモリ不足でした

とりあえずサーバにSSH接続ができるようになったのでnginxやphp-fpmのログを確認すると「cannnot allocate memory」というエラーがいろいろなところに。

どうやらアクセスが一時的に多くなった時にphp-fpmのプロセスが増えてメモリを使いつくしてしまったようです。そのためSSH接続のためのメモリ確保がサーバでできなくなって接続もできなくなってしまっていたかと思います。

AWSの無料枠のt2.microはメモリが1GBなので、php-fpmとかのプロセス上限を適切に設定しないとメモリが直ぐに枯渇してしまう・・・

nginxとphp-fpmのプロセス上限を設定することで対処

①nginxのプロセス数に関して

nginxはnginx.confのworker_processesでプロセス数を設定しますが、nginxはhttpdとは違いアクセス毎にプロセスは立ち上がらないのであまり心配しなくても大丈夫です。

worker_processがautoに設定されている場合、コア数分のプロセスが立ち上がりこれ以上は立ち上がりません。

 

②php-fpmのプロセス数に関して

どうやらこちらのプロセス数が原因のようで、pm.max_childrenで上限を低く設定したら事象が発生しなくなりました

/etc/php-fpm.d/www.confファイルの設定を変更します

pm = static
pm.max_children = 5

私の場合メモリ1GBのサーバで運用しているためプロセス数は5に設定しましたが、これはサーバのメモリ量に応じて調整します。