Linux系统 Tomcat 报错;Too many open files

一台正式服务器,Linux + tomcat 5.5.9 + jdk1.5.10 + nginx
nginx 跑在80端口,动态的转给tomcat

从昨天开始,早晨6点开始报错 Too many open files
我的系统里设置的 ulimit -SHn 655350
用ulimit -n 查看 可以查看到
请兄弟们帮忙,多谢了!

2个回答

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内核参数了。

ulimit -SHn 655350
如此大的设置还会出现too many open files,说明应用中存在泄漏问题。
仔细检查检查程序吧

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!