ブログで500 Internal Server Errorが頻発するので調査してみたらWordPress Popular Postsが原因だったっぽい

なんか先日からこのブログの調子が悪くて、特に何もしてないのに最新記事にアクセスしようとすると500 Internal Server Errorが出まくる現象が続いていました。

どうやらプラグインのWordPress Popular Postsのキャッシュが原因だったっぽいです。解決にいたるまでにやったことを書いておきます。WordPressでブログ運用してて何もしてないのに500 Internal Server Errorが出て困ってるぞーという人がいましたら参考にしてみてください。

.htaccessの初期化

最初は.htaccessの設定を疑いました。というわけで.htaccessをデフォルトの記述にリセット。しかしながら問題は解決せず。

WordPressとプラグインを全て最新バージョンに更新

WordPressの最新バージョンが公開されていたのでダメもとでアップデートしてみました。効果なし。あとプラグインがいくつか最新バージョンになっていなかったのでまとめて更新しました。が、こちらも効果なし。

キャッシュ設定をOFF

使っているwpXレンタルサーバーの管理画面からキャッシュ設定をOFFにしました。するとエラーが解消されました。

問題の切り分けを進めていくとキャッシュ設定と何かが干渉しているっぽい様子。一件落着、とはいきません。キャッシュ設定をOFFにしたままだとサイト表示が遅くなるのでよくない。ONにしておきたい。

プラグインの全停止

キャッシュ設定は何と干渉していたのか。プラグインでは? というわけでインストールしているプラグインを全部停止してみました。残念ながら問題は解決せず。

phpMyAdminを見てみよう

スクリーンショット 2018-05-14 12.55.42
何かしら解決の糸口が見つかるといいなーと思いながらwpXの管理画面からphpMyAdminにログイン。

スクリーンショット 2018-05-14 12.45.43
するとこのような。明らかに異常な数値を出している行があります。

スクリーンショット 2018-05-14 12.58.58
こいつ。wp_popularpostssummary。WordPress Popular Postsという人気記事を一覧表示するプラグインに関係するファイルですね。

人気記事のランク付けをするために必要なアクセス数のデータが蓄積されまくってアホみたいな容量になったのではという仮説を立てました。やっと原因らしきものを見つけることができて嬉しい。

テーブルを最適化しよう

スクリーンショット 2018-05-14 13.00.45
よくわからないままphpMyAdminの画面をいじくっています。ドロップダウンボックス内に「テーブルを最適化する」という選択肢があったのでやってみました。

スクリーンショット 2018-05-14 13.01.49
結果です。Table does not support optimizeって返ってきました。つまりこいつはこの手順では最適化できないっぽい。

WordPress Popular Postsをアンインストールしよう

というわけでWordPressの管理画面に入ってWordPress Popular Postsを停止→削除してみます。

スクリーンショット 2018-05-14 13.07.09
そして再度phpMyAdminの画面へ。さっきのwp_popularpostssummaryのデータが行ごと消えました。この辺りで勝利を確信。

動作確認

キャッシュ設定を再度ONにしてSafariのプライベートブラウズで再確認。すると500番のエラーが出なくなりました。やったぜ。

WordPress Popular Postsの再インストール

WordPress Popular Postsは便利なプラグインなので戻したい。再インストールします。WordPressの管理画面からプラグイン→新規追加→「WordPress Popular Posts」で検索→「今すぐインストール」をクリック→「有効化」をクリック。

スクリーンショット 2018-05-14 13.23.28

phpMyAdminで再確認

スクリーンショット 2018-05-14 13.12.28
再度phpMyAdminにログインしてみたところ、wp_popularpostssummaryの行が正常っぽい値に戻りました。さっきは100万行超えてたのが9行に、204.4MBだったのが64KBに。

この後何度か動作検証してみたところ、500番のエラーは完全に出なくなり、ブログが元どおり表示されるようになりました。

解決

というわけで解決です。まさかこのプラグインが原因だとは思っていなかったので問題の切り分けに丸2日ぐらいかかりました。

今後の対策

WordPress Popular Postsの設定画面にはキャッシュクリア的な機能がないので、今後定期的に今回おこなったプラグインの削除→再インストールをするしかないかなあというところです。

というわけで「WordPress Popular Postsを削除して再インストール」というリマインダーが1年ごとに飛ぶようにGoogleカレンダーで設定しました。これで今後は大丈夫でしょう。お疲れ様でした。