私のDrupal 6サイトは何年もスムーズに稼働していましたが、最近では断続的に極端な速度低下(10〜60秒のページ読み込み)が発生しました。数時間の遅延に続いて、通常のページ読み込み(4〜6秒)が行われます。ページは常にエラーなしでロードされ、場合によっては永遠にロードされます。
------編集-----更新された質問:
この問題をトラブルシューティングするにはどうすればよいですか?
私が使用した:
------編集の終了-----------
私のセットアップ:
トラフィック:平均1〜3ヒット
トラブルシューティング
問題は、Apacheがリクエストに応答していることのようですが、以前は100%のCPU負荷でのみこの動作を見てきました。リソースの監視だけで判断すると、ほとんど進行していないように見えます。
ここにキッカーがあります-サイトのアクセスの約半分はLANからのものですが、ファイアウォールルールを無効にしてネットワーク外部からのアクセスをブロックすると、内部(LAN)アクセス(1000以上のデバイス)が高速になります。しかし、外部からのアクセスが回復するとすぐにサイトは機能しなくなります。
Apacheの構成?クローラー/ボット?攻撃者?私はロープの終わりにいますが、どこに問題があるのかを判断するためにどこを調べるべきですか?
------編集:-----
15秒の読み込み時間を示すwebpagetest.orgのウォーターフォールチャートを添付すると、数分もかかることがあります。繰り返しますが、サーバーはほとんどの場合正常に動作します。緑色の領域は、ブラウザがリクエストを送信し、サーバーからデータの最初のバイトを受信するのを待っていることを示します。これは確かにバックエンドの遅延ですが、CPUがこの低速の間にほとんど使用されないのは不可解です。
多くの研究の結果、解決策を見つけたかもしれません。私が正しい場合、それはApacheの設定の問題でした。具体的には、「ThreadsPerChild」ディレクティブ。参照... http://httpd.Apache.org/docs/2.2/platform/windows.html
Apache for Windowsはマルチスレッドであるため、UnixでApacheができるように、リクエストごとに個別のプロセスを使用しません。代わりに、通常2つのApacheプロセスのみが実行されます。親プロセスと、要求を処理する子プロセスです。子プロセス内では、各リクエストは個別のスレッドによって処理されます。
ThreadsPerChild:このディレクティブは新しいものです。使用するスレッド数をサーバーに伝えます。これは、サーバーが一度に処理できる接続の最大数です。したがって、多くのヒットが発生する場合は、この数をサイトに十分高い値に設定してください。推奨されるデフォルトはThreadsPerChild 150ですが、これは受け入れられる同時接続の最大予想数を反映するように調整する必要があります。
結局のところ、このディレクティブは私の設定ではまったく設定されておらず、デフォルトで64に設定されていました。タスクマネージャーで2番目のhttpd.exeプロセスのスレッド数を表示することでこれを確認しました。サーバーが64を超える接続にヒットしたとき、余分な要求はスレッドが開くのを待つだけでした。 httpd.confにThreadsPerChild 150を追加しました。
さらに、Apacheステータスモジュールを有効にしました http://httpd.Apache.org/docs/2.2/mod/mod_status.html
...これにより、サーバー上のアクティブなリクエストの合計数をいつでも確認できます。すぐに、最大80のアクティブリクエストの急増が見られました。時間が経てばわかりますが、これで問題が解決すると確信しています。これまでのところ、しゃっくりなしで30時間。