许久没来,不知道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=1tomcat 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配置?提供点意见和建议。。谢谢!!
问题:
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=1tomcat 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配置?提供点意见和建议。。谢谢!!
解决方案 »
- 原项目由spring 读.properties改为读.xml,需要改动哪里啊?
- java: 把上传的文件在一段时间之后自动删除
- 请教<logic:iterate>的使用
- 怎样用java类(非servlet)输出一个静态网页?? 求救
- 救命啊!java 简体、繁体、英文、日文要在一个界面里显示,怎么解决
- 执行sql语句时,这个错:Duplicate entry '0' for key 1 是什么错啊?
- jdbc怎么访问sql server的带有输出参数的存储过程
- 如何同JSP实现树型目录请帮助
- jsp与DB2的问题?
- 请教TOMCAT中文问题
- java可以调用google map api吗?
- dtree如何实现对页面的操作 或者说frame页面之间的操作
那么你可以尝试关闭HTTP1.1协议下的新特性:KeepAlive
Tomcat的位置是在server.xml 中的Connector 元素中。另外,Apache内核参数可以再适当调低(慎重慎重):
sysctl -w net.ipv4.tcp_keepalive_probes=2
sysctl -w net.ipv4.tcp_keepalive_intvl=2
关于内核参数,你说的那个实在有点闷。。由于我keepalive已关闭,所以内核参数也用不着改了。。
worker.t22a.port=XX
worker.t22a.host=XXX
worker.t22a.type=ajp13
worker.t22a.lbfactor=1
worker.t22a.connection_pool_size=1(官方提示apache2.2,prefork模式不能超过1,因为本身没有用到连接池)
worker.t22a.connection_pool_timeout=20
worker.t22a.socket_timeout=120
#worker.t22a.socket_connect_timeout=20000(默认和socket_timeout一样)
#worker.t22a.recovery_options=3
#worker.t22a.socket_keepalive=1(apache和tomcat在一台机器,无须此属性)最新的情况还在测试中,4楼的老兄还有没有其他的建议可以一起探讨。。这问题。。困扰我快一周了。。
再来点高手啊。