我让 Apache 在 3 个 Tomcat 服务器前充当负载平衡器。有时,Apache 会返回 503 响应,我想将其完全删除。就 CPU、内存或磁盘而言,所有 4 台服务器都没有承受很大的负载,所以我有点不确定是什么达到了它的限制或为什么。当所有工作人员都处于错误状态时返回 503 - 不管这意味着什么。以下是详细信息:
阿帕奇配置:
<IfModule mpm_prefork_module>
StartServers 30
MinSpareServers 30
MaxSpareServers 60
MaxClients 200
MaxRequestsPerChild 1000
</IfModule>
...
<Proxy *>
AddDefaultCharset Off
Order deny,allow
Allow from all
</Proxy>
# Tomcat HA cluster
<Proxy balancer://mycluster>
BalancerMember ajp://10.176.201.9:8009 keepalive=On retry=1 timeout=1 ping=1
BalancerMember ajp://10.176.201.10:8009 keepalive=On retry=1 timeout=1 ping=1
BalancerMember ajp://10.176.219.168:8009 keepalive=On retry=1 timeout=1 ping=1
</Proxy>
# Passes thru track. or api.
ProxyPreserveHost On
ProxyStatus On
# Original tracker
ProxyPass /m balancer://mycluster/m
ProxyPassReverse /m balancer://mycluster/m
Tomcat 配置:
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</Engine>
</Service>
</Server>
阿帕奇错误日志:
[2010 年 3 月 22 日星期一 18:39:47] [错误] (70007) 指定的超时已过期:代理:AJP:尝试连接到 10.176.201.10:8009 (10.176.201.10) 失败 [2010 年 3 月 22 日星期一 18:39:47] [错误] ap_proxy_connect_backend 禁用(10.176.201.10)的工作人员 [2010 年 3 月 22 日星期一 18:39:47] [错误] 代理:AJP:无法连接到后端:10.176.201.10 [2010 年 3 月 22 日星期一 18:39:47] [错误](70007)指定的超时已过期:代理:AJP:尝试连接到 10.176.201.9:8009(10.176.201.9)失败 [2010 年 3 月 22 日星期一 18:39:47] [错误] ap_proxy_connect_backend 禁用 (10.176.201.9) 的工作人员 [2010 年 3 月 22 日星期一 18:39:47] [错误] 代理:AJP:无法连接到后端:10.176.201.9 [2010 年 3 月 22 日星期一 18:39:47] [错误] (70007) 指定的超时已过期:代理:AJP:尝试连接到 10.176.219.168:8009 (10.176.219.168) 失败 [2010 年 3 月 22 日星期一 18:39:47] [错误] ap_proxy_connect_backend 禁用(10.176.219.168)的工作人员 [2010 年 3 月 22 日星期一 18:39:47] [错误] 代理:AJP:无法连接到后端:10.176.219.168 [2010 年 3 月 22 日星期一 18:39:47] [错误] 代理:BALANCER:(balancer://mycluster)。所有工作人员都处于错误状态 [2010 年 3 月 22 日星期一 18:39:47] [错误] 代理:BALANCER:(balancer://mycluster)。所有工作人员都处于错误状态 [2010 年 3 月 22 日星期一 18:39:47] [错误] 代理:BALANCER:(balancer://mycluster)。所有工作人员都处于错误状态 [2010 年 3 月 22 日星期一 18:39:47] [错误] 代理:BALANCER:(balancer://mycluster)。所有工作人员都处于错误状态 [2010 年 3 月 22 日星期一 18:39:47] [错误] 代理:BALANCER:(balancer://mycluster)。所有工作人员都处于错误状态 [2010 年 3 月 22 日星期一 18:39:47] [错误] 代理:BALANCER:(balancer://mycluster)。所有工作人员都处于错误状态
负载均衡器top
信息:
top - 23:44:11 up 210 天,4:32,1 个用户,平均负载:0.10、0.11、0.09 任务:总共 135 个,运行 2 个,睡眠 133 个,停止 0 个,僵尸 0 个 中央处理器:0.1%us、0.2%sy、0.0%ni、99.2%id、0.1%wa、0.0%hi、0.1%si、0.3%st 内存:总共 524508k,已使用 517132k,空闲 7376k,9124k 缓冲区 交换:总计 1048568k,已使用 352k,免费 1048216k,缓存 334720k
雄猫top
信息:
top - 23:47:12 up 210 天,3:07,1 个用户,平均负载:0.02、0.04、0.00 任务:总共 63 个,1 个正在运行,62 个正在睡眠,0 个停止,0 个僵尸 中央处理器:0.2%us、0.0%sy、0.0%ni、99.8%id、0.1%wa、0.0%hi、0.0%si、0.0%st 内存:总共 2097372k,已使用 2080888k,可用 16484k,21464k 缓冲区 交换:总计 4194296k,已使用 380k,免费 4193916k,缓存 1520912k
Catalina.out 中没有任何错误消息。
根据 Apache 的服务器状态,它似乎达到了 143 个请求/秒的最大值。我相信服务器可以处理比它们实际更多的负载,因此任何有关低默认限制或其他原因导致此设置最大化的提示将不胜感激。