web-dev-qa-db-ja.com

Apacheはサーバーにばかげた負荷をかけます

サーバー上でApache2を実行しています。
今日は多くのhttpリクエストがあり(ただし珍しいことではありません)、どういうわけか平均負荷は200を超えました(!!!)。明らかに、Webサイトはダウンしていました(到達できませんでした)。

enter image description here

Apacheを停止すると、負荷が比較的急速に低下しますが、Apacheを再開するとすぐに、負荷は数秒で100を超えました。
奇妙なのは、CPUとMEMのワークロードが正常であるか、システムが処理するプロセスがたくさんあることを「認識」していないかのように低いことです。

さらに奇妙なのは、突然CPU負荷がすべてのコアで100%になったということです: enter image description here

そこから、負荷は数分以内に通常(<1)に戻り、Webサイトに突然再びアクセスできるようになりました。

私は本当にこの種の行動を自分自身に説明することはできません。誰かが私が将来それを防ぐのを手伝ってくれる?

2
horen

2つの野生の推測:

1)ドキュメントルートは、NFSまたはその他のネットワークファイルシステム、あるいは応答が遅いかまったく応答しないクラスターファイルシステムを介して提供されます。

2)Apache(およびPHPスクリプトなど)は、データベースまたはその他の外部リソースを待機しています。

私の最初の推測は1)非常に短いスパイクですべてが正常に戻ったためです。その場合は、ネットワークまたはファイルサーバーを確認してください。

4

@Janne Pikkarainenの最初の推測を補完して、

また、エラーログメッセージ、特に仮想ホストに複数のログファイルがある場合は、(internal dummy connection)署名に関するデフォルトのメッセージを確認してください。 詳細はこちら

一部のApache2バージョンでは、これらは、グレースフルリロードまたはガベージコレクションを強制するように設定されたApache内部接続を通知します。それらはすべての生きている子に送信され、デフォルトの仮想ホスト(Apache2 -Sからの最初の仮想ホスト)によって管理されます。デフォルトの仮想ホストがリソースを大量に消費する場合、この突然のピークは、ログガベージだけでなく、そのような悪影響も引き起こす可能性があります。

nFSまたはデータベース(またはその他のブロックするもの)がこれらに見舞われた場合、簡単な修正は、実際のダミーのデフォルト仮想ホスト(「動作する」もの)を使用することです。

1
regilero

プレフォークMPMは、高性能の実稼働展開には途方もなく不向きです。追加のプロセスの起動は非常にコストがかかり、各プロセス(スレッド)は最大30MBを簡単に使用できます。

代わりに、ワーカーMPMまたは(最新のApacheを実行している場合は)イベントMPMの使用を検討してください。

同じメモリフットプリントでスレッド数を10倍に簡単に増やすことができます。

1
adaptr

Apacheの構成を確認し、次のディレクティブに注意してください。

それらのデフォルト構成は適切でない場合があります。これは私の場合であり、サーバーが通常よりも多くヒットしたときに、Apacheが大量のメモリを使用する結果になりました。私の問題は、これらの値を減らすことで解決されました。

ProductionApacheの構成を理解していることを確認してください。テスト用にデフォルトがあります。

0
dunxd