Apache 版本 2.4.34 (Win64) Apache Tomcat 6.0.44 Windows Server 2016 标准版本 1607
经过一段时间(1-2 小时)后,应用程序性能会变得非常差,有时会导致出现维护(服务暂时不可用)页面。
在 Tomcat 日志中我找不到任何问题。在 Apache 日志中:
[Mon Apr 15 08:41:49.585041 2019] [proxy_ajp:error] [pid 3880:tid 1044] (OS 10060)A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. : AH01030: ajp_ilink_receive() can't receive header
[Mon Apr 15 08:41:49.585041 2019] [proxy_ajp:error] [pid 3880:tid 1044] [client 1.2.3.4:50880] AH00992: ajp_read_header: ajp_ilink_receive failed, referrer ...
除了上面给出的日志外,日志中还有以下条目
[Mon Apr 15 08:41:20.131907 2019] [proxy_balancer:error] [pid 3880:tid 1092] [client 80.114.182.213:54316] AH01167: balancer://ajaxbalancer: All workers are in error state for route (ajaxB), referer: https://url here
分析:
由于没有锁并且查询执行时间也很正常并且数据库服务器处于最佳运行状态,因此数据库的问题已被排除。
设置 :
有 2 台服务器在使用负载均衡器的集群环境中运行。
两台服务器上的 Tomcat 配置相同:
<Connector port="8109" protocol="AJP/1.3" redirectPort="8443" maxConnections="-1" connectionTimeout="300000" keepAliveTimeout="300000" />
Apache 配置:
ProxyErrorOverride Off
ProxyTimeout 120
Timeout 120
ProxyPass /static_html !
<Proxy balancer://ajaxbalancer/>
BalancerMember ajp://127.0.0.1:8109/app route=Srv1 loadfactor=10 ttl=90
BalancerMember ajp://127.0.0.1:8109/app route=Srv1 loadfactor=10 ttl=90
ProxySet stickysession=JSESSIONID|jsessionid scolonpathdelim=On nofailover=On
#ProxySet lbmethod=bybusyness
ProxySet lbmethod=byrequests
</Proxy>
<Location "/swingApp/">
ProxyPass balancer://ajaxbalancer/
ProxyPassReverse balancer://ajaxbalancer/
ProxyPreserveHost On
SetEnv keepalive=on
</Location>
我请求您帮助我解决这个问题。如果需要更多信息,请告诉我。
答案1
支持 Apache Tomcat 6.0.x结束于 2016 年 12 月 31 日发布。自那时起,已宣布了多个安全漏洞,这些漏洞很可能会影响 6.0.x 系列(一旦 Tomcat 版本达到 EOL,将不再评估它是否受到新安全漏洞报告的影响)。
您描述的问题听起来像是 Tomcat 端的线程耗尽。您可以增加maxThreads
AJP 连接器,使其等于MaxRequestWorkers
httpd 上的线程耗尽,或者disablereuse
在代理配置中启用。