web-dev-qa-db-ja.com

100%CPUで実行されているApacheおよびMySQLプロセス

通常は非常に安定しており、非常に長い間運用されている運用サーバーがあります。

昨夜、それは突然非常に高い負荷(150+)を示し始めました。 Apacheを無効にすると、負荷がすぐに減少します。

enter image description here

これは、Apacheを再起動した直後のtopの出力です。すでに負荷が22.68に戻っています。

サーバーログとmod_statusの出力には、負荷が高いためにリクエストのバックアップが開始されることを除いて、特に興味深いものは何も表示されません。

突然の問題を説明するリクエストに関しては、サーバーに異常な負荷がかかっているようには見えません。

何か案は?

[〜#〜]更新[〜#〜]

これはshow processlist;からのmysql接続のスクリーンショットですenter image description here

2
fred2
  1. Apacheによって作成された子の数を減らします。何十ものWebページが互いにつまずいてもメリットはありません。 Apacheは、新しいページの開始を遅らせることを非常に喜んでいます。
  2. 「高負荷平均」がMySQLによって引き起こされている場合は、インデックスが欠落しているか、SELECTが適切に定式化されていない可能性があります。そのいたずらなクエリを見つけ、stackoverflow.comで質問を開いて、それを改善する方法について話し合ってください。

SHOW PROCESSLISTあなたが追加しました、私のコメントはZzzzzzzzzzzです。 MySQLは「何も」していません-本質的にすべてが「スリープ」モードになっていることに注意してください。 「スリープ」は、次のSQLステートメントが送信されるのを待つ以外に何もしていない接続(おそらく接続プールから)の状態です。

top...を見ると、2コア相当のCPUパワーがmysqldによって使用されており、6コア相当がApacheによって使用されているようです。どのクライアントを使用していますか? PHPには、最適化が必要な忙しいPHPコードがあります。まず、各ループ、特にネストされたループを確認します。

「突然の問題」については、このような状況(私の経験では)がしばらくたってから、「突然」「屋根を通り抜ける」。彼らは通常、最終的にほどけるでしょう。確かに、Apacheまたはmysqldを強制終了するか、再起動するか、クライアントの着信を停止することができます。その間、「ユーザー」は恐ろしい「ユーザーエクスペリエンス」を取得しています。

1
Rick James

将来の参考のために、問題はRAIDコントローラーの障害でした。同じ時代の2台の同じサーバーで、RAIDコントローラーが互いに1週間以内に故障した。

RAIDコントローラーに障害が発生しただけでなく、RAIDコントローラーに障害が発生したことを通知するシステム通知も失敗しました。

0
fred2