WordPress 4.3 の管理画面が真っ白になってしまった

データセンター Webサイト管理

別のサイトで記事にコメントがついたので返信しようと管理画面を開いたら、画面が真っ白になってしまいました。ようやく解決できたので記録を兼ねて作業を追ってみようと思います。

原因の切り分け

特に何かをいじったわけではなく、2時間ほど前には記事を書いていたのに突然のことで焦りました。

サーバー負荷

ここ数日、アクセスが伸びてきてサーバーの負荷が高かったので、それが原因かなと思いましたがアクセス解析を見ても瞬間的にアクセスが集中しているわけではなかったし、サイト自体は見れていたしレスポンスも悪くなかったし、そもそもサーバー負荷の許容範囲50%ぐらいしか使っていないのでサーバー負荷が問題では無いと結論付けました。

デバッグモードでエラーを確認

デバッグモードにする

WordPressはwp-config.phpに設定することでデバックモードにできます。デバックモードにするとエラーメッセージが画面に表示されるようになるので、それで原因を探ることができます。デバッグモードにするにはwp-config.phpを

define('WP_DEBUG', true);


と編集します。

エラーを確認

デバッグモードで真っ白になる管理画面を開きエラーを確認したところ

Allowed memory size of ○○○○○○ bytes exhausted (tried to allocate ○○○○○○ bytes) in /wp/wp-includes/wp-db.php on line 1094


と表示され、メモリー不足が原因とわかりました。

メモリ不足の心当たりがない

私が使用しているバリューサーバーは格安のサーバーですがメモリが少ないなどと言うデメリットはありません。WordPressを動かすぐらいなら問題なく動作するはずですので、メモリ不足に陥る何かがWordPress側にあるんだろうと思いました。

WordPress 4.3の不具合

結論から先に申し上げれば、これはWordPress 4.3の不具合でした。いわゆるバグです。WordPressのサポートフォーラムに解決策が提示してありました。

[resolved] High CPU Load After Update to v4.3
https://wordpress.org/support/topic/high-cpu-load-after-update-to-v43

“taxonomy.php”の修正

  1. “wp-includes/taxonomy.php”の以下の行を探します。4448行目あたりにあります。

    wp_schedule_single_event( 'wp_batch_split_terms', time() + MINUTE_IN_SECONDS );
    

  2. この行を以下の様に修正します。

    wp_schedule_single_event( time() + MINUTE_IN_SECONDS, 'wp_batch_split_terms' );
    

  3. 以上で終了です。

“fix.php”の作成

  1. “wp-content/”に「mu-plugins」ディレクトリを作成します。
  2. 以下の内容の「fix.php」を作成し、“wp-content/mu-plugins/”にアップロードします。

    <?php
    function clear_bad_cron_entries() {
    	// Fix incorrect cron entries for term splitting
    	$cron_array = _get_cron_array();
    	if ( isset( $cron_array['wp_batch_split_terms'] ) ) {
    		unset( $cron_array['wp_batch_split_terms'] );
    	        _set_cron_array( $cron_array );
    	}
    }
    clear_bad_cron_entries();
    

  3. 以上で完了です。

管理画面が無事に開いた

これらの作業を行った後に、管理画面を開いてみたところ真っ白だった管理画面が無事に開くようになりました。

まとめ

ここ数日、管理画面がやたらと思いなぁと思っていましたが、不具合(バグ)が原因だったようです。そろそろサーバーの切り替え時期かと思っていましたが、もう少し様子を見てもいいかもしれません。

タイトルとURLをコピーしました