ApacheのServer-Statusで見るとSending Replyは減ってくれないんです。
keepalive_timeを減らしてみたんですが
多少は増えなくなったんですが、それでも増えることがあります。
Server-StatusでSending Reply状態のIPを見ると
googlebotやYahooなんですよね
中途半端な通信をしているから、残ってしまうのですかね
ほかのアクセスはちゃんとしているんですが
keepalive_timeを調整する前はCLOSE_WAITもひどい状態でした。
3日ぐらいで定期的に再起動しているんですが
たまに一気に増えるときがあって、増えすぎると
サーバーはフリーズしかけるんです。
いい解決策ないでしょうか?
> ApacheのServer-Statusで見るとSending Replyは減ってくれないんです。
> keepalive_timeを減らしてみたんですが
> 多少は増えなくなったんですが、それでも増えることがあります。
>
> Server-StatusでSending Reply状態のIPを見ると
> googlebotやYahooなんですよね
> 中途半端な通信をしているから、残ってしまうのですかね
> ほかのアクセスはちゃんとしているんですが
>
> keepalive_timeを調整する前はCLOSE_WAITもひどい状態でした。
CLOSE_WAITは、FINを受け取ったのにFINを返していない状態なので、「keepalive_timeを調整する前はCLOSE_WAITもひどい状態でした。」というのが、どういう状態かよくわかりませんね。
ログを見るとgooglebotはアクセスが多い(ページランクが大きい)サイトは、1サイトあたり1回/1分ぐらいで回ってきているようです。
おやじのところはバーチャルホストで複数サイト運用しているので、全体ではその数倍と思います。
おやじのところの状況を見てみましたが、そもそもCLOSE_WAITなんて1つもありませんでした。
パケットキャプチャしてみましたが、KeepAliveTimeoutを設定してあればタイムアウトすればApacheからFINがでてgooglebotもチャントFINで切ってきていますので、変なダウンローダのように食い散らかしているようには見えません。
コンテンツ(CGI等のバグ含む)やフィルタ等のアクセス制限でrobotからのアクセスのセッションが残ってしまっていないでしょうか?
因みにおやじのところは、prefork MPMの標準設定でKeepAliveTimeoutは15です。
アクセスはすべて合わせて、30000PV/日程度です。
> 3日ぐらいで定期的に再起動しているんですが
> たまに一気に増えるときがあって、増えすぎると
> サーバーはフリーズしかけるんです。
> いい解決策ないでしょうか?
ログを見ればわかると思いますが、ある特定のコンテンツということはないですか?
> CLOSE_WAITは、FINを受け取ったのにFINを返していない状態なので、「keepalive_timeを調整する前はCLOSE_WAITもひどい状態でした。」というのが、どういう状態かよくわかりませんね。
> ログを見るとgooglebotはアクセスが多い(ページランクが大きい)サイトは、1サイトあたり1回/1分ぐらいで回ってきているようです。
> おやじのところはバーチャルホストで複数サイト運用しているので、全体ではその数倍と思います。
> おやじのところの状況を見てみましたが、そもそもCLOSE_WAITなんて1つもありませんでした。
> パケットキャプチャしてみましたが、KeepAliveTimeoutを設定してあればタイムアウトすればApacheからFINがでてgooglebotもチャントFINで切ってきていますので、変なダウンローダのように食い散らかしているようには見えません。
> コンテンツ(CGI等のバグ含む)やフィルタ等のアクセス制限でrobotからのアクセスのセッションが残ってしまっていないでしょうか?
> 因みにおやじのところは、prefork MPMの標準設定でKeepAliveTimeoutは15です。
> アクセスはすべて合わせて、30000PV/日程度です。
>
> > 3日ぐらいで定期的に再起動しているんですが
> > たまに一気に増えるときがあって、増えすぎると
> > サーバーはフリーズしかけるんです。
> > いい解決策ないでしょうか?
>
> ログを見ればわかると思いますが、ある特定のコンテンツということはないですか?
特定のコンテンツというわけじゃないですが
PHPで作った物が多いのでPHPで止まっていることが多いのは確かです。
うちでもKeepAliveTimeoutは15にしてあります。
じゃあ、PHPで書いたコンテンツがBOT等でアクセスされたとき
ちゃんと終わらずに抜けられているから
そのままばぐったままになっているということでしょうか?
普通にアクセスする分にはバグは出てないんですが
PHPを見直すしかないんでしょうか?
それとも、強制的に終わらせるようなことはできるんでしょうか?
> 特定のコンテンツというわけじゃないですが
> PHPで作った物が多いのでPHPで止まっていることが多いのは確かです。
> うちでもKeepAliveTimeoutは15にしてあります。
>
> じゃあ、PHPで書いたコンテンツがBOT等でアクセスされたとき
> ちゃんと終わらずに抜けられているから
> そのままばぐったままになっているということでしょうか?
>
> 普通にアクセスする分にはバグは出てないんですが
> PHPを見直すしかないんでしょうか?
エラーではなく「PHPで止まっていることが多い」なら、そうなって当然と思います。
バグ取りするしか基本的な対策はないと思いますが、その他の問題も含めてオーバオールでの対策としてmonitあたりを検討してはどうですか?
これを入れておけば、apacheが反応しなくなるとrestartしてくれます。
http://www.aconus.com/~oyaji/suse9.3/monit.htm