どこをもっと深く掘り下げるべきか、アドバイスをお待ちしています。
すぐに、Apache2 サーバーは起動後 2 ~ 15 時間後にリクエストの処理を停止します。その結果、service apache2 restart
半日ごとに処理する必要があります。
ロングバージョン:
- 私は専用サーバー (Ubuntu 13.04) からいくつかの Web サイト (Apache 2.2.22、2013 年 7 月 12 日構築) を実行しています。
- Apache2 サーバーは半年以上正常に動作していましたが、突然、Apache プロセスが再起動されるまで、すべての Web サイト (約 5 つのサイト) でリクエストの処理が停止します。
- この問題に関して、/var/log/apache に異常なログは見つかりませんでした。
service apache2 status
プロセスが実行中であると報告する
あなたの提案や、私の状況ではどうすればいいのかを聞かせてもらえると嬉しいです。
アップデート:
ランニングnetstat -an | grep 80
:
tcp6 0 0 :::80 :::* LISTEN
tcp6 325 0 SERV_IP:80 IP_A:35514 CLOSE_WAIT
tcp6 332 0 SERV_IP:80 IP_B:34198 CLOSE_WAIT
tcp6 379 0 SERV_IP:80 IP_C:57859 CLOSE_WAIT
tcp6 0 0 SERV_IP:80 IP_A:35060 CLOSE_WAIT
tcp6 360 0 SERV_IP:80 IP_A:38481 CLOSE_WAIT
tcp6 466 0 SERV_IP:80 IP_B:56324 CLOSE_WAIT
tcp6 361 0 SERV_IP:80 IP_A:53466 CLOSE_WAIT
tcp6 1 0 SERV_IP:80 IP_A:38102 CLOSE_WAIT
tcp6 196 0 SERV_IP:80 IP_E:58125 ESTABLISHED
そして、このようなエントリがさらに約 150 件あります。
ps aux | grep apache
:
root 2968 0.0 0.0 452240 21116 ? Ss 16:08 0:01 /usr/sbin/apache2 -k start
www-data 5217 0.0 0.0 463584 23820 ? S 17:04 0:03 /usr/sbin/apache2 -k start
後半の行 (www-data) は約 120 個あるので、Apache プロセスは 120 個だと思いますか?
strafe
apache2 ルートプロセスで使用:
sudo strace -f -p 2968
Process 2968 attached - interrupt to quit
select(0, NULL, NULL, NULL, {0, 264394}) = 0 (Timeout)
wait4(-1, 0x7fff6d157a6c, WNOHANG|WSTOPPED, NULL) = 0
select(0, NULL, NULL, NULL, {1, 0}) = 0 (Timeout)
wait4(-1, 0x7fff6d157a6c, WNOHANG|WSTOPPED, NULL) = 0
www-data プロセスの 1 つで使用します。
sudo strace -f -p 8554
Process 8554 attached - interrupt to quit
flock(40, LOCK_EX
うわー、どうやら Apache プロセスが停止し、接続の最大制限を超えると新しいインスタンスの作成が停止するようです。しかし、なぜ停止するのでしょうか?
htop、iotop、jnettop は異常を報告しません。(オーバーロードなし)
更新2: 過去2日間、サーバーがクラッシュしなくなりました。そのため、これ以上の情報を得ることができません。代わりに、あなたの助けに感謝し、回答を受け入れます。さらに情報が得られ次第、よりよく構成された本文の新しい質問へのリンクを残します。ありがとうございます
答え1
「service apache2 status」が何を報告しても、ps aux を実行すると Apache プロセスが表示されますか?
問題が発生したときに netstat -n を実行できますか? ファイル記述子などのリソースが不足しているか、開いている接続が多すぎる可能性があります。
問題が発生している間、CPU 使用率は高くなっていますか? システムのメモリが不足してスラッシングが発生している可能性がありますか?
http サーバーは接続拒否で応答しますか、それとも接続がタイムアウトしますか?
後者の場合、strace -f -p [apachepid] を実行することをお勧めします。これにより、どのシステム コールが要求をブロックしているかがわかる場合があります。前者の場合、おそらく Apache がクラッシュしています。
Tomcat または別のアプリケーション サーバーをプロキシしますか、それとも単純な静的 HTML を提供しますか?
認証を設定しましたか?例えば、認証層で何か問題が発生している可能性があります
アップデート:
2 番目の strace で、flock(40,LOCK_EX が確認できます。プロセスがどこかで排他ロックを取得しようとしている可能性があります。lsof -n -p 8554 (または flock を試みる pid) を実行して、どのファイルをロックしようとしているかを確認できます (40 はファイル記述子です)。また、「ls /proc/8554/fd」を実行することもできます。