Apache: どのページ/仮想ホストがサーバーを殺しているか確認する

Apache: どのページ/仮想ホストがサーバーを殺しているか確認する

Web サーバーをオンラインに戻すことができません。サーバーがクラッシュし続けるため、再起動するには電源を入れ直す必要があります。

私は共有ホストを使用しているため、原因を見つけるのはさらに困難です。

どの特定のページ (または少なくともどの仮想ホスト) の CPU 使用率が異常に高いのかを調べるにはどうすればよいでしょうか?

私は CentOS と標準的な Apahce+MySQL+PHP を使用しています。

ありがとう!

答え1

おそらく、apachetop をインストールするのが最善のアイデアです。https://code.google.com/p/apachetop/Apache の server-status を使用することもできますが、apachetop を使用すると、はるかに読みやすくなります。

答え2

ページは実際にはこの問題とは何の関係もありません。

次のコマンドは、httpd ワーカーがある現在の作業ディレクトリで、CPU パーセンテージ順にソートされた httpd の pid リストを出力します。

もちろん、これは httpd が原因であると想定しています。

IFS=" "; ps -A ho pcpu,comm,pid | grep httpd | sort -k1n \
while read pcpu comm pid; do \
    echo -n "${pcpu"}: "l pwdx "${pid}"; 
done

次のような出力が得られます。

0.0: 1850: /
0.0: 1852: /
0.0: 1854: /
0.0: 1853: /
0.0: 1855: /
0.0: 1856: /
0.0: 1857: /
0.0: 1858: /

これが機能するのは、Apache が仮想ホスト内で作業を行う前に、ディレクトリを仮想ホストのドキュメント ルートに変更するためです。したがって、そのドキュメント ルートを持つ仮想ホストが原因となります。

同じドキュメント ルートを使用する仮想ホストが複数ある場合は、両方の仮想ホストを調査して、その内容を確認する必要があります。

CPU 時間を消費する Apache ワーカーがないので、それらはすべて 0.0 であり、順序付けは行われません。

問題が実際には SQL クエリである場合は、何も表示されないことを期待しないでください。

関連情報