web-dev-qa-db-ja.com

数日間の稼働後にApacheがハングする原因を特定するにはどうすればよいですか?

数日の稼働時間の後にApacheがハングする理由を見つけることができません。

これは、メモリでソートしたトップの出力です

top - 14:51:45 up 1 day, 18:02,  3 users,  load average: 6.73, 5.15, 6.27
Tasks: 233 total,   1 running, 226 sleeping,   0 stopped,   6 zombie`
Cpu(s): 34.0%us, 13.8%sy,  0.0%ni,  3.2%id, 48.3%wa,  0.0%hi,  0.8%si,  0.0%st
Mem:   4043688k total,  3943568k used,   100120k free,    46784k buffers
Swap:  1051376k total,   659504k used,   391872k free,   372016k cached


  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
17156 Apache    40   0  271m 204m 5800 S  0.0  5.2   0:10.53 httpd
16735 Apache    40   0  273m 204m 5504 S  0.0  5.2   0:05.32 httpd
17532 Apache    40   0  271m 204m 5188 S 81.1  5.2   0:07.83 httpd
17904 Apache    40   0  271m 204m 5396 S  0.0  5.2   0:09.81 httpd
17177 Apache    40   0  271m 203m 5248 S  0.0  5.2   0:05.63 httpd
19507 Apache    40   0  271m 203m 5272 S  0.0  5.2   0:05.14 httpd
16734 Apache    40   0  271m 203m 5380 S  0.0  5.2   0:10.20 httpd
18571 Apache    40   0  271m 203m 5240 S  0.0  5.2   0:05.05 httpd
19492 Apache    40   0  271m 203m 5212 S  0.0  5.2   0:05.30 httpd
19506 Apache    40   0  271m 203m 5188 S  0.0  5.2   0:10.28 httpd
19497 Apache    40   0  271m 203m 5172 S  0.0  5.2   0:07.65 httpd
17527 Apache    40   0  271m 203m 5240 S  0.0  5.2   0:05.03 httpd
19144 Apache    40   0  271m 203m 5220 S  0.0  5.2   0:02.58 httpd
19145 Apache    40   0  271m 203m 5152 S  0.0  5.2   0:02.60 httpd
17165 Apache    40   0  271m 203m 5104 S  0.0  5.1   0:02.63 httpd
17900 Apache    40   0  271m 203m 4576 S  0.0  5.1   0:05.08 httpd
17174 Apache    40   0  271m 193m 5300 S  0.0  4.9   0:10.04 httpd
16742 Apache    40   0  271m  84m 5468 S  0.0  2.1   0:20.03 httpd
19812 Apache    40   0  100m  33m 4812 D  7.6  0.8   0:00.23 httpd
16741 Apache    40   0  271m  18m 5700 S  0.0  0.5   0:08.16 httpd
 5095 root      40   0 84448  13m 4388 S  0.0  0.3   0:14.79 httpd
 4511 named     40   0 51340  10m 1128 S  0.0  0.3   2:13.22 named
 4697 mysql     40   0  153m 8964 2560 S  0.0  0.2   4:50.60 mysqld
16727 Apache    40   0 73828 7752  444 S  0.0  0.2   0:00.00 httpd
 4245 sso       40   0 28268 3224 1628 S  0.0  0.1   0:00.10 sw-engine-cgi
25520 root      40   0 68164 3052  276 D  0.0  0.1   1:58.79 tar
25473 psaadm    40   0 38364 2564  852 S  0.0  0.1   0:01.69 sw-engine
25512 root      40   0 14112 2432  808 S  0.0  0.1   0:00.78 python
 4912 root      40   0 35160 1648  460 S  0.0  0.0   0:11.67 spamd
28823 root      40   0 12092 1556 1320 S  0.0  0.0   0:00.08 sshd
13713 root      40   0 12092 1444 1324 S  0.0  0.0   0:00.36 sshd
 6829 root      40   0 12092 1440 1320 S  0.0  0.0   0:01.65 sshd
 4240 sso       40   0 27204 1140  760 S  0.0  0.0   0:00.21 sw-engine-cgi
20409 qmailr    40   0  4908 1060  884 S  0.0  0.0   0:00.00 qmail-remote.mo
 7073 root      40   0  5112 1032  816 S  0.0  0.0   0:00.01 bash
20135 qmaild    40   0  4920 1032  864 S  0.0  0.0   0:00.00 qmail-smtpd
19755 qmaild    40   0  4920 1028  856 S  0.0  0.0   0:00.00 qmail-smtpd
13757 root      40   0  4992 1016  804 S  0.0  0.0   0:00.00 bash
29109 root      40   0  2416 1016  724 R  0.0  0.0   0:06.99 top
20133 qmaild    40   0  4920 1000  832 S  0.0  0.0   0:00.00 qmail-smtpd

私はstrace -p [pid]そしてそれらのプロセスが通常のApacheのことをしていることがわかりました...

2
Pierre

推奨される既存のスレッドで指定されたサーバーステータスをセットアップします。プロセスサイズが大きすぎるように見えます。これは、メモリリークが発生している可能性があるようです。

MaxRequestsPerChildを1000または100に設定すると、コードにメモリリークやその他の問題がある場合に役立ちます。これは通常、問題が発生する前にプロセスを強制終了します。これにより、問題を追跡する時間が与えられる場合があります。

0
BillThor

完全なApacheハングは、非常にまれなことです。

これらのハング時間の前後にApacheのアクセス/エラーログを読んだ場合はどうなりますか?発生するたびに特定のURLにアクセスしますか?

インストールは基本的なApache + PHP + MySQLのインストールですか、それとも、xCacheのようないくつかのPHPオペコードキャッシュがインストールされているなど、よりエキゾチックなものがインストールされていますか? ?

Httpd.confはどうですか?非常に長いタイムアウト値を設定しましたか?そして、キープアライブをオンまたはオフにしていますか?

コマンド apachetop も、デバッグ中に非常に役立ちます。

[〜#〜] edit [〜#〜]:. htaccessまたはPHPコードのいずれかでリダイレクトに問題がある場合があります非常に劇的なサーバークラッシュを引き起こす可能性があります。次のような行を含む.htaccessファイルがある場合

ErrorDocument 404 http://yourserver/notfound.html

そのファイルが存在しない場合、Apacheは非常に高速なリダイレクトループに移行し、数秒で混乱します。

適切なErrorDocument行は次のようになります

ErrorDocument 404 /some/path/notfound.html

また、Apacheリライトモジュールは、いくつかの誤ったリライトルールでサーバーをクラッシュさせる可能性があります。 Mod_rewriteはブードゥーです。かっこいいけど、それでもブードゥー、そして時には非常に効率的な大量破壊兵器。

2

彼ら全員がディスクI/Oを待っているようです。

strace -p <pid>を使用すると、もう少し深く掘り下げることができます

1
pjz

すでに スレッド あなたを助けることができる情報があります。

最初に「server-status」に関する承認済みの投稿を試してから、私が推奨したこと、つまりLogLevelを変更することをお勧めします。

1