mod_jk失去了与tomcat的连接

时间:2012-09-07 01:27:50

标签: apache tomcat ajp

我的当前生产服务器出现了问题,该服务器在过去几天刚刚开始。 我正在运行apache httpd-2.2.3和tomcat-5.5.20,与mod_jk v1.3连接,并在tomcat上托管了一个Spring MVC站点。 发生的事情是,在大约12个小时后,网站会挂起我们的用户。当第一次发生时,我可以在catalina.out中看到以下几个错误

WARN [org.apache.jk.core.MsgContext] Error sending end packet
java.net.SocketException: Broken pipe

在查看之后,我开始明白这意味着用户在完成之前已经取消了请求,因此返回路径已关闭,因此数据无法返回。从搜索网络看起来这可能会导致线程在tomcat中保持打开状态,直到它达到超时。这似乎是有道理的,因为我在catalina.out日志结束时tomcat摔倒了

All threads (200) are currently busy, waiting. Increase maxThreads (200) or check the servlet status

建议是对apache httpd.conf中的JkModule设置进行以下更改

JkOptions +DisableReuse

我确保它没有对我们的网站造成任何副作用,并且第二天运行正常,但昨天在网站冻结时出现了相同的症状。但是这次在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

workers.properties

# 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设置

1 个答案:

答案 0 :(得分:2)

原来答案是改变keepalive超时。所有我需要阻止这种情况发生的是将KeepAliveTimeout从15更改为2并添加5000的MaxRequestsPerChild。我发现这使这个问题不再发生