Apache2.2+jk1.35+tomcat6大并发占用大量tcp close_wait端口
许久没来,不知道csdn有没有高手进入。。
问题:
apache2.2,内负载,前端F5负载到两台服务器21,22,分别做apache内负载-单台机单个apache托三个tomcat,在大并发情况下,发现大量tcp close_wait假死等待关闭,而且一直维持在此状态。导致请求堆积,出现超时错误。。
netstat发现close_wait端口为在apache与tomcat之间的连接状态。。如下:
tcp 1 0 192.168.83.22:32454 192.168.83.22:8408 CLOSE_WAIT
tcp 1 0 192.168.83.22:32506 192.168.83.22:8408 CLOSE_WAIT
tcp 1 0 192.168.83.22:32267 192.168.83.22:8408 CLOSE_WAIT
tcp 1 0 192.168.83.22:32297 192.168.83.22:8408 CLOSE_WAIT
等等。。
通过命令
[chaichunyi@localhost ~]$ netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'
TIME_WAIT 205
CLOSE_WAIT 1082
FIN_WAIT1 1
FIN_WAIT2 279
ESTABLISHED 811
LAST_ACK 1
可见大量close_wait端口被占用。。
workers配置如下:
worker.t22a.port=XXXX
worker.t22a.host=XXX
worker.t22a.type=ajp13
worker.t22a.lbfactor=1
worker.t22a.connection_pool_size=1500
worker.t22a.connection_pool_timeout=20
worker.t22a.socket_timeout=180
worker.t22a.socket_connect_timeout=180000
worker.t22a.socket_keepalive=1
tomcat ajp3协议配置:
<Connector port="8409" protocol="AJP/1.3"
maxThreads="2000" bufferSize="4096" enableLookups="false"
backlog="2000" connectionTimeout="20000" redirectPort="8443"
URIEncoding="UTF-8" />
apache关键配置:
Timeout 60
KeepAlive On
MaxKeepAliveRequests 400
KeepAliveTimeout 3
<IfModule mpm_prefork_module>
StartServers 50
MinSpareServers 50
MaxSpareServers 300
ServerLimit 6000
MaxClients 5000
MaxRequestsPerChild 15000
</IfModule>
解决方案尝试:
已优化了服务器内核参数还是无法解决,如下:
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_keepalive_time=1800
net.ipv4.tcp_keepalive_probes=4
net.ipv4.tcp_keepalive_intvl=15
请问谁有做过大并发的apache配置?提供点意见和建议。。谢谢!!