XSERVER PC・728 x 90 wordpress

[WordPress]突然ページの読み込みが遅くなったときに対応したこと

シェアしていただけるとうれしいです

トラブル
8/11の深夜にぼくのブログ「まろろぐ」で、サーバーエラーが頻発していたようです。
たまたまそのときにGoogleのクローラーがやって来ていたらしく、「Search Console」にその様子が記録されていました。
サーバーエラー発生

毎朝いつも自分のブログがちゃんと表示されているか確認するのですが、「まろろぐ」だけ異様に読み込みが遅く、たまに503エラーが発生しました。503エラーというのは、

503 Service Unavailable
サービス利用不可。サービスが一時的に過負荷やメンテナンスで使用不可能である。
例として、アクセスが殺到して処理不能に陥った場合に返される。

参考URLウィキペディア・HTTPステータスコード

「アクセスが殺到して処理不能に陥った」とありますが、Google Analyticsをみてもそのような事実はありません。全く平穏無事なアクセス数です。

同じXSERVERのX10プランの契約で運用している「まろらぼ」「まろくっく」にはまったく影響がありません。通常通り閲覧できます。ぼくのアカウントで過負荷があるのであれば、同じレンタルサーバー上にある他のブログに影響があっても良さそうなものです。

「まろらぼ」「まろくっく」は「まろろぐ」のサブドメインで運用しています。XSERVERの場合、親ドメインの設定がサブドメインにも影響するような環境になっています。例えば、PHPのバージョンの変更やFastCGIの設定を自由に変更できますが、その変更内容はサブドメインにも反映されます。サブドメインごとの設定は変更ができません。

「ページの読み込みが遅い」「503エラーが頻発する」という現象が収まる様子が全くないため、原因を探ることにしました。

サーバーの設定を変えてみる

XSERVERのX10プランでは、サーバーの設定として、下記のパラメータを変更することができます。

  • PHPのバージョン
  • mod_pagespeedの有効/無効
  • FastCGIの有効/無効、キャッシュモジュールのON/OFF

とりあえず、この辺のパラメータを変えることでページの読み込みに変化が起きるかどうかを調べました。

PHPのバージョン

XSERVERのX10プランでは、下記のPHPのバージョンを選択できます。(2016年8月13日現在)

  • PHP7.0.7 ※
  • PHP5.6.22 ※
  • PHP5.5.30 ※
  • PHP5.3.3
  • PHP5.4.45 / PHP5.2.17 / PHP5.1.6 / PHP4.3.9

PHPの開発グループによって公式にサポートされているPHPのバージョンは※が付いているPHP7.0.7、PHP5.6.22、PHP5.5.30です。
PHP5.3.3は公式サポートが終了していますが、RedHat 6/CentOS 6のデフォルトのPHPのバージョンであり、RedHat/CentOSによってまだサポートされています。機能追加はされず、セキュリティパッチのみ提供されています。古いPHPで作られたWebアプリケーションを動作させるためにまだ「一応」サポートはされているよ、という事情のためです。

PHP5.4.45 / PHP5.2.17 / PHP5.1.6 / PHP4.3.9は公式サポートが終了しており、不具合や脆弱性があっても更新されません。ですので、使わないほうがよろしいです。

ぼくの「まろろぐ」「まろらぼ」「まろくっく」はPHP5.6.22で運用していました。WordPressの動作環境としてはPHP7でも動作確認はされていますが、念のため、一つ古いバージョンで、かつ、公式にサポートされているバージョンを選んでいました。これまでトラブルに見舞われたことはありません。今回のトラブルがブログを運用し始めてから初めてのトラブルです。

PHPのバージョンを変更することで現象が解消されるかも?という期待もあって、PHP7.0.7に変更してみました。
残念ながら、ページの読み込みは遅いままで、503エラーが出ることもあり、変化はありませんでした。

一つ古いPHP5.5.30に変更してみても何ら変わりはありません。PHPのバージョンで現象が変わることはない、ということです。

mod_pagespeedの有効/無効

mod_pagespeedというのは、Googleが開発したページ読み込み高速化のためのApache(Webサーバー)のモジュールです。これの有効/無効で現象が変わるかどうかを調べてみました。

もともと、.htaccessでページ読み込みの高速化の対応をしていたので、mod_pagespeedは無効にしていました。
.htaccessには下記の内容を記載しています。

こちらの設定をコメントアウトして無効にし、mod_pagespeedを有効にしてみました。相変わらずページの読み込みは遅く、503エラーが出る時もありました。
コメントアウトを元に戻した状態でmod_pagespeedを有効にしても変わりはありませんでした。

FastCGIの有効/無効、キャッシュモジュールのON/OFF

残るパラメータとしてはこちらになるのですが、FastCGI/キャッシュモジュールは、PHP7.0.7、PHP5.6.22では無効にできません。ですので、PHP5.5.30に変更して試してみました。

PHPのバージョンを5.5.30に落とし、FastCGI/キャッシュモジュールを無効にすると、なんと!ページの読み込みが速くなり、503エラーも出ることがなくなりました。おそらくですが、FastCGIの何かが悪さをしてページの読み込みが遅くなり、503エラーが出ることがあるのではないか?という推測ができます。

エラーログを確認してみる

よくよく考えてみると、まず原因を調べるためにはエラーログを見てみるべきでした。
XSERVERのログは3時にローテーションされてしまい、デフォルトで1日分しか保存されませんので、残念ながら8月12日の午前3時以降の分しか残っていません。それでもエラーが頻発しているためか、下記のような記載がたくさんありました。

mod_fcgidのエラーっぽいので、やはりFastCGIのエラーのようです。
「mod_fcgid: can’t apply process slot」でGoogleを検索してみたのですが、これといって解決に繋がるような情報はありませんでした。

サポートページを見てみる

XSERVERのサポートのページに何か情報は載っていまいかと思い、探してみました。該当しそうな情報として、こちらがありました。
参考URLホーム > サポート > よくある質問 > サーバー > サービスについて > ホームページ > WordPress

Q.WordPressで作ったサイトへのアクセスが増えてきました。負荷対策としてできることはありますか?
A.
CPU負荷への対策について
【1】プログラム処理で発生するCPU負荷そのものを減らす
下記のような方法があります。

  • サーバーパネルで「PHP高速化設定(FastCGI化)」を有効にする
  • 使用していないプラグインを停止する、もしくは削除する
  • プラグインの負荷状況を計測するプラグイン「P3 (Plugin Performance Profiler)」を利用し、負荷の大きいプラグインを同等の機能の、より負荷の少ないプラグインへ置き換える

また、運用中のWordPressに対して「コメントスパム」が多発している場合、コメントスパム対策を行うとともにデータベース上に登録されたスパムコメントを削除することで、主にデータベース負荷やメモリ使用量関連の負荷が削減されます。

サーバーパネルで「PHP高速化設定(FastCGI化)」を有効にするは、そもそもFastCGIにすることでページの読み込みが遅くなっているので、残念ながら有効な手立てではありません。

使用していないプラグインを停止する、もしくは削除するは、使用していないプラグインは必要最低限度にしているし、削除できるプラグインはありません。

プラグインの負荷状況を計測するプラグイン「P3 (Plugin Performance Profiler)」を利用し、負荷の大きいプラグインを同等の機能の、より負荷の少ないプラグインへ置き換えるについて調べてみて、負荷のかかっているプラグインがないかどうかを調べてみることにしました。

P3 (Plugin Performance Profiler)のインストール

負荷のかかっているプラグインがないかどうか調べるためにプラグインをインストールするというのはなかなか腑に落ちませんが、調べて原因がわかればアンインストールすればいいだけの話なので、とりあえずインストールしてみました。

「プラグイン」→「新規追加」で「Plugin Performance Profiler」を検索してインストールします。
P3 (Plugin Performance Profiler)をインストール

「ツール」→「P3 Plugin Profiler」を開きます。
P3 - Plugin Performance Profilerを開く

「Start Scan」をクリックするとスキャンできるようです。よくわからないので「Auto Scan」をクリックしてみます。
Auto Scanをクリック

なにやら、ページを切り替えながら調べてくれているようです。
スキャン中

終わったようです。「View Results」をクリックします。
結果を見る

円グラフで負荷のかかっているプラグインがわかるようになっています。
P3 - Plugin Performance Profilerの調査結果

この結果で行くと、次のプラグインの負荷が大きそうでした。

  • Contact Form 7
  • WordPress Popular Posts
  • Widget Logic
  • Revive Old Post (Former Tweet Old Post)
  • Crazy Bone
  • EWWW Image Optimizer
  • Broken Link Checker

これらのプラグインを順に無効にしていったのですが、何ら状況に変わりはありません。どうしたものか?

全プラグインを停止してみる

P3 (Plugin Performance Profiler)で調べてみても、サーバーの動作に負荷を与えるようなプラグインはなかった、ということになります。ここで詰んだか・・・。

仮にここで調査終了して、PHP5.5.30でFastCGIとキャッシュモジュールを無効にしておけば、ブログとしての運用は可能です。
しかし、気持ちが悪いですし、PHP7.1がリリースされると、PHP5.5系列はサポートから外されてしまいます。そうなるとPHP5.6系列にバージョンを上げなければならないのですが、現在のPHP5.6.22ではFastCGIとキャッシュモジュールが必須で無効にできないため、「まろろぐ」は正常に運用できなくなってしまいます。

こんな場合、得てしてあるのが「プラグイン同士の相性」。あるプラグイン同士の動作が干渉して、動作がおかしくなってしまうということ。
いったん、すべてのプラグインを無効にし、順番に有効にしていくことで、どのプラグインを有効にした時に動作が異常になるのかを調べてみることにしました。

すべてのプラグインを無効にし、XSERVERのサーバーパネルでPHP7.0.7に変更します。すべてのプラグインが無効になっているのでブログの表示はおかしいですが、表示のスピードは元に戻っています。やはり、プラグイン同士の干渉が原因かもしれません。

プラグインのリストの上から順番に有効にし、ブログのトップページを表示させ、ページの読み込み速度を確かめます。単純で地道なお仕事です。

順に有効にしていって、あるプラグインを有効にしたところ、ページの読み込みが極端に遅くなりました。その時点でエラーログを調べると、「エラーログを確認してみる」のところで書いたとおり、mod_fcgidでエラーが起きていました。
RSS Antennaが原因?

RSS Antennaを有効にすると、表示速度が遅くなり、503エラーが発生します。おそらく、RSS Antennaがいずれかのプラグインと干渉しているか、RSS Antennaそのものの動作が影響しているのでは?と考えられます。

RSS Antennaは、他のサイトのRSS Feedを読み込んで表示させるプラグインです。
RSS Antenna
「まろろぐ」からIT関連と料理のカテゴリを分離して立ち上げたブログ「まろらぼ」「まろくっく」の更新情報を「まろろぐ」サイドバーに表示させるために利用していましたが、別段なくても運用には困らないので、無効にしたままにしておくことにしました。

今は快適に動いています

RSS Antennaが使えなくなってしまったのは残念ですが、今のところ快適にページが表示されているので満足しています。
現在は、PHP7.0.7mod_pagespeedON.htaccessに記載したデータ圧縮の設定とブラウザキャッシュの設定もそのまま残してあります。

ちなみに、PHP7.0.7にしてP3(Plugin Performance Profiler)で負荷のかかっているプラグインを調査すると、下記のような結果になりました。
PHP7.0.7にしてP3(Plugin Performance Profiler)で負荷のかかっているプラグインを調査

負荷のかかっているプラグインは、調査するために動作しているP3(Plugin Performance Profiler)のみ、という結果になりました。
PHP7.0.7にバージョンアップすることで各プラグインが効率よく動いているということなのか、P3(Plugin Performance Profiler)がPHP7に対応していないのかは、わかりません。

しかし、前日まで調子よく動いていたものが、ある日突然調子が悪くなってしまった原因はよくわかりません。新しいプレグインをインストールしたとか、XSERVERの設定を変えたということもありません。

不思議なこともあるものだ、ということで、みなさんの参考になりましたら幸いです。

WEBのシステムを作ったり保守したりするSE/プログラマというものをしています。
ブログやってますがブロガーではありません。週末WEB随筆家です。
まろと呼んでください。
スポンサーリンク