EC2で動かしているWordPressが止まる原因を探る
このサイトはEC2にWordPressを設置して動かしているのですが、開設当初はよく止まっていました。症状としてはヘッダーだけが表示されてコンテンツが表示されない、このサイトは動作していませんと表示される、といったもの。
この記事では、この状況に対する考察を書いていきます。
このページは動作していませんということは?

まずは主な症状の一つ「このページは動作していません」から。「このページは動作していません」という表示がされるということは、ネットワーク関連の問題ではなさそうです。問題がネットワークにある場合には、そもそもサーバーに接続できないため、表示されるのは以下のようなメッセージ。
今回はこういったメッセージではなく「このページは動作していません」と表示されることが多かったため、この問題ではなさそうです。ただ、これも今考えればであって、この結論にたどり着くまでにも随分時間がかかってしまいました。
空のサブネットにロードバランシングしていることは問題になるか?
ネットワークの問題ではなさそうと結論付けましたが、それまでには色々と調べました。真っ先に疑ったのはAWSの構成による不具合の可能性でした。とうのもこのサイトは以下のような構成になっていて、片方の接続先は空っぽです。そのため、時折そちらに繋がっているのでは?と感じました。
しかし、これはほかにも同様の構成で問題なく動いているサイトがあること、そもそもロードバランシングはヘルスチェックに問題があるときには接続しないものであることから、この可能性はないはずです。

AWSのログはどうなっているか?
EC2には異常なさそう
困ったときはエラーログを見る、ということで、AWSのログを見てみる。EC2のモニタリングタブをみても、特におかしい部分はなさそうだった。ただし、見方が誤っている可能性も大いにある。これらも後日きちんと理解していきたい。
ロードバランサーに異常がある可能性
「EC2 不安定」「EC2 落ちる」などで検索していると、ロードバランサーがエラーを返すことがあるらしことが解った。そこでロードバランサーのエラーを見てみる。実際のCloude Watch画面が以下。
複数の指標が重なっていて見ずらいけれど、実際は2月1日から2月9日くらいまで以下のエラーが頻発している。
- HTTPCode_ELB_502_Count
- HTTPCode_ELB_5xx_Count

対処
ロードバランサーがエラーを返すことがあるということで、その方向でいろいろと検索をしていると以下の2つのページがヒットした。どちらもKeepAliveの数値を変更する、という対処が紹介されていたので、httpd.confに以下の記述を追加。
KeepAlive On
KeepAliveTimeOut 120
MaxKeepAliveRequests 100
Timeout 120
これが功を奏したといいたいけれど、実はEC2の再起動も行っている。なぜかと言うとKeepAliveを有効化されている確認が取れなかったから。httpdの再起動ではだめなのか?と思って再起動してしまった。もう少し我慢して検証すべきでした。