Apache 2.2 error_logの次のメッセージで何が起こっているのかを理解しようとしています:
Wed May 18 21:03:29 2011] [error] [client 172.20.10.10] (70007)The timeout specified has expired: proxy: error reading status line from remote server super-load1-ga.test.com, referer: https://tester2.test.com/boom/ga/inside.as
p
Apache 2.2とmod_proxyを実行しています。このApacheは、httpd.confの5分のTimeOut値に関連してリクエストをタイムアウトしていますか? (5分以内にリモートサーバーからの応答を受信しないことを意味します。)または、これは単に接続を処理できないというリモートサーバーからの応答ですか。
Apacheは、このエラーが発生する頃に、MaxClientsをすぐに使い果たします。
プロキシエントリの簡単な例:
ProxyPass /boom/ga https://super-load1-ga.test.com
ProxyPassReverse /boom/ga https://super-load1-ga.test.com
ProxyPassディレクティブでタイムアウトを増やします。
ProxyPass /boom/ga https://super-load1-ga.test.com connectiontimeout=300 timeout=300
タイムアウト値はsecondsです。
https://super-load1-ga.example.com
のサーバーからの応答に時間がかかりすぎているようです。
そのシナリオでは、それがそこにあるだけであれば、Apacheプロセスはそれを待ちます。そのプロセスは基本的にブロックされています。つまり、他に何もできません。すぐにタイムアウトしないと、Apacheプロセスが不足し、MaxClientsにヒットしてしまいます。
Super-load1-ga.test.comサイトにログを記録して、リクエストの所要時間を確認する必要があります。
ProxyPass接続のタイムアウトを短縮できる可能性があります
http://httpd.Apache.org/docs/current/mod/mod_proxy.html#workers
あなたの質問に答えるために、はい、プロキシモードのApache2 httpdは、Apache2 httpdがタイムアウトになったときにそのエラーメッセージをログに記録します。プロキシモードでApache2 httpdに接続されているサーバーが原因の場合は、別のメッセージが表示されます。
メッセージには複数の部分があります:The timeout specified has expired
はAPR_TIMEUP
エラーコードに相当するテキストです。以下を参照してください:
srclib/apr/misc/unix/errorcodes.c
case APR_TIMEUP:
return "The timeout specified has expired";
次にproxy: error reading status line from remote server super-load1-ga.test.com
が
modules/proxy/mod_proxy_http.c
ログレベルをAPLOG_DEBUGに上げると、追加のメッセージproxy: read timeout
も表示されます。