首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Apache Webserver,Tomcat,AJP,“所有工作人员都处于路由错误状态”

Apache Webserver,Tomcat,AJP,“所有工作人员都处于路由错误状态”
EN

Stack Overflow用户
提问于 2014-01-07 22:09:33
回答 1查看 8.7K关注 0票数 4

首先,我一直在互联网上寻找解决方案。下面只是最新的链接,提供了一些信息,但似乎没有发挥作用。

https://serverfault.com/questions/19947/apachetomcat-having-problems-communicating-unclear-error-messages-bringing-do

Tomcat stops responding to Apache

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

代码语言:javascript
运行
复制
[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实例,通过AJP配置了4个Tomcat工作人员。目前,所有Tomcat工作人员都在单独的主机上托管在Windows下。

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

Apache版本:

代码语言:javascript
运行
复制
Server version: Apache/2.2.22 (Win32)

Tomcat是7.0.29版

每个BalancerMember都有以下配置参数:

代码语言:javascript
运行
复制
keepalive=On timeout=600 ttl=600

当前使用本机连接器(org.apache.coyote.ajp.AjpAprProtocol)的每个Tomcat实例。

连接器配置:

代码语言:javascript
运行
复制
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" maxThreads="450" connectionTimeout="600000" />

应用程序本身通过Oracle ojdbc15_g JDBC驱动程序v11.2.0.3.0连接到Oracle。

我观察到的事情:

  1. Tomcat服务器似乎没有被Apache的请求所淹没。这是对日志活动的观察,以及通过Apache服务器-状态数据进行的验证,并通过j控制台的线程活动提供了支持。(我从未看到执行线程的数量增加到接近上述限制的程度)。这是一个为400名用户服务的内部应用程序,大多数用户不在同一时间;因此,负载不应该是问题所在。
  2. 我似乎没有任何线程死锁问题.当使用j控制台远程监视Tomcat实例时,我会查看ajp-apr-8009-exec#线程来确认这一点,而且大多数处于等待状态,而我可以看到一些线程正在积极处理。
  3. 我们确实有一些长时间运行的请求--有些请求有时会超过我前面描述的600 s的超时时间。这是我目前正在探索的领域;请求长度的原因通常是对一个非常大的数据存储区进行联合搜索,这需要时间,但通常在几秒钟内返回。当它花费更长的时间时,通常是由于用户构造不佳的关键字搜索,导致Oracle阻塞了很长一段时间,从而构建了结果。目前,我正在重构它,以便它在请求/apr exec线程的单独线程中运行,如果执行时间超过280(4分40秒),它将杀死线程并向用户抛出一个错误;这样我就可以排除Tomcat处理请求所花费的时间太长。

至于我现在正在做什么来尝试解决这个问题,我觉得我已经用尽了我的配置能力(这包括在网上搜索每一个可能的解决方案,因为我是一个软件行业的人,而不是基础设施)。因此,我通过切换平台尝试了一种不同的策略:我在Linux机器上运行了Apache get服务器,并且使用DNS循环,一部分用户通过Linux而不是Windows路由。这似乎没有帮助,但Tomcat工作人员仍然运行在相同的Windows框上。

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

如果没有别的,我想确认一下,我对长时间执行请求的怀疑是正确的。我尝试过各种配置更改,但都没有效果。

EN

回答 1

Stack Overflow用户

发布于 2015-07-09 19:15:37

这个错误在apache error_log中.

我们在阿帕奇前面有一个超时差600的ELB。tomcat设置为超时600

我们的错误是webserver超时。

如果apache未显式配置,则超时时间为60秒。

例如,TimeOut 600在httpd.conf中

apache webserver和tomcat实例之间的超时可能会在长时间运行的会话中超时.例如,一个长api调用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20982988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档