サイトが表示されない!?500 Internal Server Errorで対処せざるをえなくなった

PAK74_denwadekiregimi1209500
Internal Server Errorって焦りますね。

先月ですが、WPXサーバー引っ越しして間もないころに、突然500エラーが連発して相当焦りました。

500 エラーとは、以下のようなメッセージがサイトで表示される状態のことです。
おおまかにいうと、サーバーのキャパオーバーの為、サイトが表示できなくなっている状態です。
HTTP エラー 500(internal server error) サーバーによるリクエストの実行中に、予期しない状況が発生しました。

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, admin@ and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

大方のブログ記事にも書いてあるように、原因は
.htaccess 記述
・サーバの負荷オーバー でありますが、WordPressの初心者の方がみても??って感じですよね。

具体的な、解消方法としては、プラグインとキャッシユ系の見直しでほぼ解決すると思います。

まずは、ここから、プラグインの見直し

一回自分の使ってないプラグインを見直ししてみます。不必要なプラグインの削除と、プラグインを最新のものに変更します。サイト構築の為に最初はうれしくてプラグインを入れまくりますが、意外と冷静になると、必要のないプラグインも多くあります。ちなみに、私はプラグイン30個ほど(多すぎ、、)ありましたが
これを気に10個程度に厳選しました。

更新については、特にプラグインGoogle XML Sitemapsは、サイトの更新状態をGOOGLEに自動で通知してくれる便利なプラグインですがサーバーに高負荷がかかります。できる限り最新のものを使うようにした方がよいと思います。

キャッシュ系の見直し

キャッシュ系もプラグインを見ていきます。私の場合には、WPXのサーバーを使ってW3を使っていたので、
もろに、下記の現象が起きていました。
wpXレンタルサーバーでW3 Total Cacheが500エラーになる問題の解消方法、ピンチから脱出せよ!

W3とWPxは本当に相性悪いですね。

ちなみに、WP Super Cacheを使っている方も、削除したつもりでもadvanced-cache.php が残っている現象がありました。 特に問題にはなってないですが、キャッシュ系が必要ないということなら削除しても良いかなと思います。

それでも治らない。なら(面倒だけど)ほかの原因を特定するしかない

さてさて、私の場合プラグインでもキャッシュ系でも治りませんでしたので、原因を特定していく必要がありました。
backupも毎日とっていったのですが、毎日更新されているサイトなので、1、2日でもバックアップが入るとそこからの復旧も大変です。

まず、エラーログの確認の為に、WPXへ問い合わせをしたところ。
SELECT t.post_id, c.meta_value, cr.meta_value, cbc.meta_value FROM wp_postmet において
ある一定数以上のアクセス集中により該当のクエリの実行に時間がかかるようになり、こちらの実行時間の関係によりタイムアウトが発生しているのでは無いかと考えられる状況でございます。 との結果が、WPXより返答が返ってきました。

CPU利用量のリソースも確認しましたが、200を上回っている気配はありません。

そしてサイトの500エラー動作の確認として、どの部分の表示速度を確認したところ。
現在、速度に不満なく動くページは管理画面内のダッシュボードや投稿一覧、プラグイン一覧でした。
また、動作が不安定になるのは、編集や更新作業の時に500 Internal Server Errorが表示されます

これらを考慮すると、データベースからの読込が遅くなっていると仮定しました。
試しにphpmyadminからもアクセスしてみましたが、とりわけカスタムフィールド関連が入っている wp_postmetaテーブルの表示が遅かったです。

要は、カスタムフィールドを作成しすぎたことが直接の原因だったようです。

原因さえ分かればちゃっちゃと治して終了です。私が、実際にやった操作は、

1.SQLのオーバーヘッドの最適化      個人的には、phpmyadminから直接オーバーヘッドの最適化を選択するのが、良いかと思いますが、慣れない方は、プラグインで「WP-Optimize」や「WP-DBManager」などで探しても良いかもしれません。

2.不必要なカスタムフィールドの削除。
これもphpmyadminに慣れていなければ、プラグインで「Delete Custom Fields」使うと楽です。
(ただし、Delete Custom Fieldsを使った場合は、原因はわかりませんが、カスタムフィールドのデータは消えるのですが、フィールド名は残ったままになります。原因わかる方、教えて下さい)

3.データフィールドの時系列分散
カスタムフィールドを時系列で新規作成後に自動的に別データベースに移動するクエリを作成しました。
主に、1つのページのデータベースにかかる負荷分散を行いました。(詳細は、長くなるので、時間があれば記述します)

ようやく500 Internal Server Error解決しました。

色々試した結果、どの点から治ったのか定かではありませんが、一応解決しました。ここまで丸1週間くらい500エラーが続きっぱなし、、
サイトの規模が大きくなってくると、ポータルサイトやマルチサイト系のサイトはWordPress少し弱いのかな?と思った次第です。いや、それでも使い続けるんですけどね。

500 Internal Server Errorをすぐに解消する方法

500 Internal Server Errorがでるとしばらくサイトページが表示されないです。
管理人とっては気が気ではないよね。(私がそうでしたので)根本的な解決方法にならないですが、補足で、根本的な解決方法にならないですが、500 Internal Server Errorをすぐに解消する方法もあります。

Internal Server Errorの発生原因はさまざまではありますが、私のように処理のタイムアウト等に起因してエラーが発生している場合、「原因が取り払われた段階」で自動的に解除されます。

今回は、サーバー側からみた場合には、DBへのクエリの滞留でした。

この場合、phpmyadmin」のトップページにある「プロセス一覧」にて「停止(=プロセスのKILL)」を行えば、滞留中のプロセスが強制終了される→以後の処理がスムーズに実行される→エラーが解消される といった流れでエラーが解消されます。

但し、クエリは、誰かが新しいクエリを作成するとすぐに溜まってしまいますので、すぐにエラーが表示されます。根本的な原因をなるべく早く特定するようにしてくださいね!

この記事を書いた人

tsubasatwi( つばさ)

国立工業高専卒業(新居浜工業高等専門学校)
「イベント×IT×営業」のカスタマーサクセスマネージャーとして活躍。セールス→構築管理運用まで全体プロジェクト管理の豊富な経験あり。

・主にITに関するイベント集客/法人営業/開発を担当
・大手通信会社を中心にエンタープライズのIT導入を担当(B2B)

DMMで日本初の NoCodeサロン を運営
「NoCodeCamp プログラミングを使わないIT開発 」
https://lounge.dmm.com/detail/2549/