最近はアクセスが減り気味であるものの特に大きな波風もなく、ただ淡々と更新を続けていましたこのブログですが、久しぶりにWordPressの障害に遭遇しました。
問題の現象
普段、私はMacBook上のMarsEdit で記事を作成し、アップロード後にWordPressのプレビューを見ながら微調整して投稿予約を設定、という流れで記事を投稿しています。
問題が発生した日も、プレビューを見て微調整するところまでは何の問題もなく実行できました。
ところがいざ最後に公開日時を設定して「更新」ボタンを押したタイミングで問題が発生しました。
いつまでたってもWordPressの画面が真っ白のままで、更新が反映された画面に遷移しないのです。該当画面のURLは
[ブログのサブドメイン]/wp-admin/post.php
となっていました。どうもPHPのPOST処理が何らかの原因で終了しないようです。
一旦セッションを中断してダッシュボードに戻り状態を確認してみると、更新しようとした内容は反映されないままでした。また同じことを何度繰り返しても、同じ現象のままでした。
幸い外部からのブログアクセスやその他のダッシュボードの動作は正常でしたが、このままでは記事の更新ができません。
原因の調査
久しぶりの障害発生で焦りましたが、とりあえず問題の原因を特定しなければ手の打ちようがありません。
私が使っているのは月額270円の格安レンタルサーバー ミニバードですが、そのあたりのサポートも割としっかりしており、サーバー管理ツールでエラーログを確認することができます。
具体的にはサーバー管理ツールの左側のメニューより「ログファイル」を選び、出てきた画面の「エラーログ」のタブを選べばエラーログファイルをダウンロードできます。
エラーログファイルはテキストファイルですので、エディターなどで開いて問題の発生した時刻付近の情報を確認します。
今回の場合は以下のようなエラーが出力されていました。
mod fcgid: stderr: PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 3538668 bytes) in /home/streamline/streamline-jp.net/public< html /wp-includes/functions.php on line 384, referer: http://streamline-jp.net/nextlife/ wp-admin/post.php?post=10177&action=edit
問題の操作を繰り返す度にこのエラーが発生しますので、これが原因とみて間違い無さそうです。WordPressの動作プラットフォームであるPHPで使えるメモリが足りなくなっているようですね。
念のため、WordPressが動作しているサーバーの情報を見ることができるWP-ServerInfoというプラグインがありましたので、これをインストールしてみました(WordPressのプラグインインストール画面で検索すると見つかります)。
これで見るとPHPのメモリサイズは256Mとなっており、これは上のエラーログ中にある「Allowed memory size of 268435456 bytes」という記述とも一致しました。
(※この画像は対処後に撮りましたので、値が1000Mと大きくなっています)
なおエラーログが使えない場合には、WordPressの設定ファイル:wp-config.phpで
define('WP_DEBUG', true);
と設定し、WordPressをデバッグモードにしてエラーを画面上に表示させるという方法もあるようですが、今回はミニバードのお陰でそこまではしなくて済みました。
対処
原因がわかりましたので対処に移ります。
WordPressのPHPで使えるメモリを拡大する手段をネットで調べてみると、以下の3つがあることがわかりました。
- Apacheの.htaccessファイルに次の設定を加える:php value memory limit 500M
- PHPの設定ファイルphp.iniの次の設定値を変える:memory_limit = 500M ;
- WordPressの設定ファイルwp-config.php に次の設定を加える:define(‘WP_MEMORY_LIMIT’, ’500M’);
(※ 各設定値中の500Mはサンプルであり、状況に応じて要調整)
ミニバードではPHPの設定もサーバー管理ツールより変えられますので、まずこれを使ってみました。
具体的にはサーバー管理ツールの左側メニューより「PHP環境設定」を選び、出てきた画面の「php.ini設定変更」のタブを選べばmemory_limitの値を変更できます。
しかしこの値を拡大しても現象は解消せず、上記のWP-ServerInfoで見てもPHPのメモリサイズは広がっていませんでした。
どうもphp.iniの値は、うちの環境ではWordPressの動作に反映されないようです。
そこで次にwp-config.phpを修正する方法を試してみました。
define(‘WP_MEMORY_LIMIT’,’400M’);
を追加してみたところ問題が解消し、WP-ServerInfoの表示値にも反映されていることが確認できました。
これでとりあえず問題は解決しましたが、調べてみるとミニバードは格安サーバーの割にはメモリが12GBまでとかなり豊富に使用できることがわかりました。
そこで、今後少々のプラグイン追加や負荷増加があっても簡単には同じ現象が再発しないよう、指定値を1000Mまで拡大しておくことにしました。
ちなみにWordPressが使えるメモリを拡大したことで性能も少しは改善しないかと期待しましたが、残念ながら体感的にはそのような効果は感じられませんでした。
さて、久しぶりの障害で明日からブログが更新できないのではないかと冷や汗をかきましたが、後から振り返ってみるとなかなか面白い体験でした。
勤めていた時もこういうのトラブルシューティングは時々やっていましたが、案外この手の作業は自分に向いていたのかもしれません(もちろん仕事となれば、かかるプレッシャーがこんなものでは無いのですが)。