5

我在一组三个 tomcat6 服务器前面有一个 Apache 服务器(服务器版本:Apache/2.2.22 (Ubuntu))。Apache 使用 mod_proxy 和 AJP 连接器设置为负载平衡器:

<VirtualHost *:80>
    ProxyRequests off        
<Proxy balancer://mycluster>
    BalancerMember ajp://localhost:8009 keepalive=On retry=1 timeout=15 ping=1
    BalancerMember ajp://10.0.3.152:8009 keepalive=On retry=1 timeout=15 ping=1
    BalancerMember ajp://10.0.3.153:8009 keepalive=On retry=1 timeout=1 ping=15

    Order Deny,Allow
    Deny from none
    Allow from all
    ProxySet lbmethod=byrequests
</Proxy>

    <Location /balancer-manager>
            SetHandler balancer-manager 
            Order deny,allow
            Allow from all
    </Location>

    ProxyPass /balancer-manager !
    ProxyPass / balancer://mycluster/
</VirtualHost>

Tomcat 使用以下 JAVA_OPTS 运行:

-Xms2048m -Xmx2048m -XX:NewSize=256m 
-XX:MaxNewSize=356m -XX:PermSize=256m -XX:MaxPermSize=356m

系统工作正常,但是过了一会儿我从 Tomcat 收到这些错误:

org.apache.jk.common.ChannelSocket processConnection 
WARNING: processCallbacks status 2

而这个来自 Apache:

[error] ajp_read_header: ajp_ilink_receive failed
[error] (70007)The timeout specified has expired: proxy: read response failed from  127.0.0.1:8009 (localhost)
[error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header

我必须重新启动 Tomcat 才能让它再次工作。

知道发生了什么吗???谷歌搜索了一段时间后,这似乎是一个很常见的问题,但是我没有找到合适的解决方案。

谢谢你的帮助!

4

2 回答 2

1

取决于情况是什么 - 一个非常常见的原因是无害的;看:

http://mail-archives.apache.org/mod_mbox/tomcat-users/200905.mbox/%3C6B028542C4A77D4CB7F06CCC1C1AEB1D018BC5CEE0@AUSP01VMBX03.collaborationhost.net%3E

即 apache 关闭,因为客户端(浏览器)关闭了 TCP 连接,并且在 tomcat 将其回复发送到内部 TCP 套接字之前,所有这些连接都已传播。

所以我会提高日志级别来确认它 - 然后适当地缩小它以进行生产。

于 2013-12-23T18:43:31.480 回答
0

如果此帖子/问题尚未打开...

尝试增加 mod_proxy 超时设置。

我见过的这类错误通常是由于 web 服务调用延迟而发生的。

于 2013-12-23T18:27:44.830 回答