サーバー上でApache2を実行しています。
今日は多くのhttpリクエストがあり(ただし珍しいことではありません)、どういうわけか平均負荷は200を超えました(!!!)。明らかに、Webサイトはダウンしていました(到達できませんでした)。
Apacheを停止すると、負荷が比較的急速に低下しますが、Apacheを再開するとすぐに、負荷は数秒で100を超えました。
奇妙なのは、CPUとMEMのワークロードが正常であるか、システムが処理するプロセスがたくさんあることを「認識」していないかのように低いことです。
さらに奇妙なのは、突然CPU負荷がすべてのコアで100%になったということです:
そこから、負荷は数分以内に通常(<1)に戻り、Webサイトに突然再びアクセスできるようになりました。
私は本当にこの種の行動を自分自身に説明することはできません。誰かが私が将来それを防ぐのを手伝ってくれる?
2つの野生の推測:
1)ドキュメントルートは、NFSまたはその他のネットワークファイルシステム、あるいは応答が遅いかまったく応答しないクラスターファイルシステムを介して提供されます。
2)Apache(およびPHPスクリプトなど)は、データベースまたはその他の外部リソースを待機しています。
私の最初の推測は1)非常に短いスパイクですべてが正常に戻ったためです。その場合は、ネットワークまたはファイルサーバーを確認してください。
@Janne Pikkarainenの最初の推測を補完して、
また、エラーログメッセージ、特に仮想ホストに複数のログファイルがある場合は、(internal dummy connection)
署名に関するデフォルトのメッセージを確認してください。 詳細はこちら
一部のApache2バージョンでは、これらは、グレースフルリロードまたはガベージコレクションを強制するように設定されたApache内部接続を通知します。それらはすべての生きている子に送信され、デフォルトの仮想ホスト(Apache2 -Sからの最初の仮想ホスト)によって管理されます。デフォルトの仮想ホストがリソースを大量に消費する場合、この突然のピークは、ログガベージだけでなく、そのような悪影響も引き起こす可能性があります。
nFSまたはデータベース(またはその他のブロックするもの)がこれらに見舞われた場合、簡単な修正は、実際のダミーのデフォルト仮想ホスト(「動作する」もの)を使用することです。
プレフォークMPMは、高性能の実稼働展開には途方もなく不向きです。追加のプロセスの起動は非常にコストがかかり、各プロセス(スレッド)は最大30MBを簡単に使用できます。
代わりに、ワーカーMPMまたは(最新のApacheを実行している場合は)イベントMPMの使用を検討してください。
同じメモリフットプリントでスレッド数を10倍に簡単に増やすことができます。
Apacheの構成を確認し、次のディレクティブに注意してください。
それらのデフォルト構成は適切でない場合があります。これは私の場合であり、サーバーが通常よりも多くヒットしたときに、Apacheが大量のメモリを使用する結果になりました。私の問題は、これらの値を減らすことで解決されました。
ProductionApacheの構成を理解していることを確認してください。テスト用にデフォルトがあります。