ApacheWebServer、Tomcat、AJP;“路线”的所有工作人员都处于错误状态;

ApacheWebServer、Tomcat、AJP;“路线”的所有工作人员都处于错误状态;,apache,tomcat,load-balancing,ajp,mod-proxy-balancer,Apache,Tomcat,Load Balancing,Ajp,Mod Proxy Balancer,在这之前,我一直在互联网上寻找解决方案。下面只是提供了一些信息的最新链接,但这些信息似乎都不起作用 尽管我在下面概述了许多配置更改,但我仍无法防止日志中出现的错误: [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 rece

在这之前,我一直在互联网上寻找解决方案。下面只是提供了一些信息的最新链接,但这些信息似乎都不起作用

尽管我在下面概述了许多配置更改,但我仍无法防止日志中出现的错误:

[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环境中运行的ApacheWebServer实例,通过AJP配置了4个Tomcat工作程序。目前,所有Tomcat Worker都在Windows下的不同主机上托管

我的场景中的所有主机都是健壮生产环境中的虚拟机,每个虚拟机都有多个内核

Apache版本:

Server version: Apache/2.2.22 (Win32)
Tomcat的版本是7.0.29

每个Balancer成员都有以下配置参数:

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

我观察到的事情:

  • Tomcat服务器似乎没有收到来自Apache的请求。这来自对日志活动的观察,以及通过ApacheWebServer服务器状态数据进行验证,通过jconsole支持线程活动。(我从未看到执行线程的数量在接近我上面设置的限制的任何地方增加)。这是一个内部应用程序,服务约400名用户,其中大多数用户不在同一时间运行;因此,负载不应成为问题
  • 我似乎没有任何线程死锁问题。。。当使用jconsole远程监控Tomcat实例时,我查看了ajp-apr-8009-exec-#线程以确认这一点,大多数线程处于等待状态,而一些线程处于活动处理状态
  • 我们确实有一些长时间运行的请求——有些请求有时会超过我上面概述的600秒超时。这是我目前正在探索的一个领域;请求长度的原因通常是在非常大的数据存储上进行联合搜索,虽然通常在几秒钟内返回,但这只需要花费时间。当需要更长的时间时,通常是由于用户的关键字搜索构造不当,导致Oracle在构建结果时阻塞了相当长一段时间。目前我正在重构它,以便它在独立于request/apr exec线程的单独线程中运行,如果执行时间超过280s(4分40秒),它将终止该线程并向用户抛出错误;这样我就可以排除Tomcat处理请求花费太长时间的可能性
  • 至于我现在正在做什么来尝试解决这个问题,我觉得我已经用尽了配置的能力(包括在线搜索所有可能的解决方案,因为我是一个软件人,不是基础设施)。。因此,我尝试了另一种切换平台的方法:我在Linux机器上运行ApacheWebServer,使用DNS循环,一部分用户通过Linux而不是Windows进行路由。这似乎没有什么帮助,但Tomcat工作人员仍然在相同的Windows设备上运行

    我目前也在Linux机器上安装Tomcat应用程序本身,当我有了稳定的应用程序时(由于假设Windows是该应用程序将承载的唯一平台,因此需要进行一些小的代码更改),我将作为一名工作人员添加该应用程序,以查看该特定实例是否遇到相同的问题


    如果没有别的,我希望确认我对长时间执行的请求的怀疑是正确的。我尝试了各种配置更改,但均无效。

    该错误出现在此处的apache错误日志中

    我们在apache前面有一个超时600的ELB。。。 tomcat设置为600的超时

    我们的错误是Web服务器超时

    如果未明确配置apache,则其超时为60秒

    例如,httpd.conf中的超时600


    apache Web服务器和tomcat实例之间的超时可能会在长时间运行的会话中超时。。。例如,一个很长的api调用。

    欢迎使用堆栈溢出。正如您提到的,您的问题将收集更多关于服务器故障的答案。祝你好运