web-dev-qa-db-ja.com

Apacheのフリーズ、どの仮想ホストがヒットしているのかを検出する方法は?

過去24時間に、フリーズのために4回ハードリブートされた運用サーバーがあります。 pingは問題ありませんが、他のすべてのサービス(Apache、SSHdなど)がタイムアウトします。 Apacheを起動してから数秒以内に突然フォークする大量の子プロセスが原因で、メモリが不足していることをApacheと診断しました。再起動直後にApacheを停止すると、サーバーが再び安定します。

私の2つの質問は次のとおりです。

  1. 各仮想ホストのアクセスログを1つずつ調べずに、どの仮想ホストが突然ハンマーで打たれたかを検出する方法はありますか?

  2. Httpd.confでvhostをすべてコメント(#)せずにすばやく有効/無効にする方法はありますか?

いくつかのシステムの詳細:

Fedora 10、x86_64、PHP 5、Apache 2.2

3
mr-euro

mod_status を使用してステータスページを設定してみてください。サーバーの起動後にアクセスできる場合は、ページが表示されます このように 対応する仮想ホストとの各接続とURLが表示されます。

サイトがひどく氾濫してアクセスできない場合は、netstat -nt | grep :80またはlsof -ni tcp:80を実行して、1つまたは2つのアドレスが氾濫しているかどうかを確認し、それに応じてiptablesを適用してください。

3
Gerald Combs

1)私はよくlsofを使用して、高負荷時にApacheが開いているファイル/ディレクトリを確認します。したがって、たとえば(debian/ubuntuで)実行できます:

lsof -u www-data

次に、より便利なものを取得するには、正しい場所(/ homeなど)で開いているファイルのみを検索し、常に開いている必要があるログファイルを除外します。

lsof -u www-data | grep /home | grep -v *.log

何が頻繁に実行されているかを把握するために、これを数回実行する必要がある場合があります。

2)実行中のdebian/ubuntuの場合、a2ensiteおよびa2dissiteを使用して、Apacheセットアップからvhostを自動的に追加および削除できます。

2
Coops