作为序言,我一直在互联网上寻找解决方案。以下是提供一些信息的最新链接,但这些信息似乎都没有起作用。
Tomcat stops responding to Apache
尽管我在下面概述了许多配置更改,但我无法阻止错误,因此会出现在日志中:
[Tue Jan 07 14:56:12.158345 2014] [proxy_ajp:error] [pid 12094:tid 140002805655296] (70007)The timeout specified has expired: AH01030: ajp_ilink_receive() can't receive header
[Tue Jan 07 14:56:12.158409 2014] [proxy_ajp:error] [pid 12094:tid 140002805655296] [client 10.4.65.146:58551] AH00992: ajp_read_header: ajp_ilink_receive failed, referer: http://xxxx/yyy/
[Tue Jan 07 14:56:12.158430 2014] [proxy_ajp:error] [pid 12094:tid 140002805655296] (70007)The timeout specified has expired: [client 10.4.65.146:58551] AH00878: read response failed from 10.4.3.33:8009 (tomcatworkerX), referer: http://xxxx/yyy/
[Tue Jan 07 14:56:12.229559 2014] [proxy_balancer:error] [pid 12094:tid 140002932012800] [client 10.4.230.138:57407] AH01167: balancer://lb: All workers are in error state for route (tomcatworkerX), referer: http://xxxx/yyy/zzz
下载的用户会看到“服务器不可用”屏幕,但连接会在几分钟后恢复。然而,有时相同的服务器连接会多次上/下;这可能是由于用户行为相同(我使用粘性会话),但我无法确认这一点。
我的配置是我在Windows环境中运行一个Apache Webserver实例,通过AJP配置了4个Tomcat worker。目前,所有Tomcat工作者都在Windows下托管在不同的主机上。
我的方案中的所有主机都是强大的生产环境中的虚拟机,每个主机都有多个核心。
Apache版本:
Server version: Apache/2.2.22 (Win32)
Tomcat是版本7.0.29
每个BalancerMember都有以下配置参数:
keepalive=On timeout=600 ttl=600
当前使用本机连接器的每个Tomcat实例(org.apache.coyote.ajp.AjpAprProtocol)。
连接器配置:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" maxThreads="450" connectionTimeout="600000" />
应用程序本身通过Oracle ojdbc15_g JDBC驱动程序v11.2.0.3.0连接到Oracle。
我观察到的事情:
至于我现在正在尝试解决的问题,我觉得我的配置能力已经耗尽(其中包括在线搜索每个可能的解决方案,因为我是一个按交易而不是基础设施的软件人员)。所以我通过切换平台尝试不同的技巧:我在Linux机器上运行Apache Webserver,并使用DNS循环,一部分用户通过Linux而不是Windows进行路由。这似乎没有帮助,但Tomcat工作者仍然在相同的Windows机器上运行。
我目前正在Linux机器上运行Tomcat应用程序,当我有稳定时(由于假设Windows是应用程序将托管在其上的唯一平台,因此需要进行一些小的代码更改)将添加为工作者,以查看该特定实例是否遇到相同的问题。
如果不出意外,我想确认我对长期执行请求的怀疑是正确的道路。我尝试了各种配置更改无济于事。
答案 0 :(得分:0)
这个错误出现在这里的apache error_log中......
我们在apache面前有一个超时为600的ELB ...... tomcat设置为超时600
我们的错误是网络服务器超时
如果未明确配置apache,则超时为60秒
例如httpd.conf中的TimeOut 600
apache webserver和tomcat实例之间的超时可能会在长时间运行的会话中超时......例如,长时间的api调用。