一台正式服务器,Linux + tomcat 5.5.9 + jdk1.5.10 + nginx
nginx 跑在80端口,动态的转给tomcat
从昨天开始,早晨6点开始报错 Too many open files
我的系统里设置的 ulimit -SHn 655350
用ulimit -n 查看 可以查看到
请兄弟们帮忙,多谢了!
一台正式服务器,Linux + tomcat 5.5.9 + jdk1.5.10 + nginx
nginx 跑在80端口,动态的转给tomcat
从昨天开始,早晨6点开始报错 Too many open files
我的系统里设置的 ulimit -SHn 655350
用ulimit -n 查看 可以查看到
请兄弟们帮忙,多谢了!
netstat -na | wc -l
看看socket是否耗尽了。
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
这个看看各个状态的socket连接都有多少。
nginx动态的转给tomcat,nginx是不能keepalive的,而tomcat端默认开启了keepalive,会等待keepalive的timeout,默认不设置就是使用connectionTimeout。
所以必须设置tomcat的超时时间,并关闭tomcat的keepalive。否则会产生大量tomcat的socket timewait。
试试设置tomcat/conf/server.xml:
maxKeepAliveRequests="1"
connectionTimeout="20000"
maxKeepAliveRequests="1"表示每个连接只响应一次就关闭,这样就不会等待timeout了。可以本地部署一个做做压力测试再上线。
如果还不行,就得优化linux内核参数了。