ここ数日で起動したばかりの現在の本番サーバーに問題があります。mod_jk v1.3 に接続された apache httpd-2.2.3 および tomcat-5.5.20 を実行しており、Tomcat でホストされている Spring MVC サイトを持っています。何が起きているかというと、約 12 時間稼働した後、ユーザーのために Web サイトがハングアップするということです。これが最初に発生したとき、catalina.out に次のエラーのいくつかが表示されました。
WARN [org.apache.jk.core.MsgContext] Error sending end packet
java.net.SocketException: Broken pipe
これを調べた後、これは、ユーザーがリクエストを完了する前にキャンセルしたため、リターンパスが閉じられたため、データを元に戻すことができなかったことを意味することがわかりました。Web を検索すると、タイムアウトに達するまでスレッドが tomcat で開いたままになる可能性があるように見えました。tomcat が倒れたときに catalina.out ログの最後に到達したので、これは理にかなっているように見えました。
All threads (200) are currently busy, waiting. Increase maxThreads (200) or check the servlet status
提案は、Apache httpd.conf の JkModule 設定に次の変更を加えることでした。
JkOptions +DisableReuse
サイトに副作用がなく、翌日には問題なく動作したことを確認してからこれを行いましたが、昨日、Web サイトがフリーズしたという同じ症状が現れました。今回は catalina.out にエラーはまったくありませんでしたが、Tomcat へのリクエストの取得を停止しました。アプリケーション ログから、17:31 に最後のリクエストを受信したことを確認できます。その後、mod_jk.log で次のことを確認できます。
[Thu Sep 06 17:37:07 2012] [18784:53792] [error] ajp_connection_tcp_get_message::jk_ajp_common.c (947): (worker1) can't receive the response message from tomcat, network problems or tomcat is down (127.0.0.1:8009), err=-104
[Thu Sep 06 17:37:07 2012] [18784:53792] [error] ajp_get_reply::jk_ajp_common.c (1536): (worker1) Tomcat is down or refused connection. No response has been sent to the client (yet)
そして、私のhttpd error_logで
[Thu Sep 06 17:38:39 2012] [error] server reached MaxClients setting, consider raising the MaxClients setting
したがって、エラーが発生するまでに 6 分かかり、その後、最大クライアント エラーが発生するまでに 1 分 30 分かかりました。Tomcat を再起動すると、この特定の問題も修正されました。
私が言及したもの (以下の現在の構成) を除いて、Apache、Tomcat、またはコネクタの構成に変更はありませんが、ユーザーごとにより多くの Ajax 要求を実行するようにサイトに変更を加えました。したがって、私が理解したいのは、システムを分析して、サーバーに過負荷をかけずにこの問題が発生しないようにするための正しい設定変更を理解する方法です。
ありがとうイアン
現在の構成
httpd.conf
Timeout 300
KeepAlive on
MaxKeepAliveRequests 100
KeepAliveTimeout 15
LoadModule jk_module modules/mod_jk.so
JkLogLevel error
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories +DisableReuse
労働者.プロパティ
# Define 1 real worker using ajp13
worker.list=worker1
# Set properties for worker1 (ajp13)
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.lbfactor=50
worker.worker1.cachesize=10
worker.worker1.cache_timeout=600
worker.worker1.socket_keepalive=1
worker.worker1.recycle_timeout=300
httpd-mpm.conf
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
Tomcat の設定は、標準的な Tomcat の設定です。