生产环境系统使用RHEL4 update4 + Tomcat 5.5.25 + JDK6.0u3,8G内存,4CPU。两台机器,白天在线用户1500左右。
在tomcat启动一段时间(平均3天左右),突然僵住,无法接收任何请求。
一开始怀疑资源泄漏,但经检查,内存、CPU、数据库在僵死前一切正常。僵死后,CPU降为0%,网络发送/接收量为0。
使用probe工具观察,得到如下结果:
正常情况下,处于工作状态(Service状态)的线程数仅在20左右(已关闭长连接的情况下)
但在快要崩溃前大约5分钟,连接数暴涨至maxThread,如1000。
观察后发现,在这5分钟内新进的请求,均处于"Service"状态,也就是tomcat connector接受新请求后,不能处理,直至请求越来越多,几分钟后最终堆积达到maxThread,Tomcat彻底僵死。
在僵死时,受影响的仅有一个应用,webapp目录下的其它应用不受影响,可以从其它端口正常访问。
已换过jdk版本,tomcat版本等,设置更大的连接数(事实上只是延长了请求堆积的时间),没有效果。出错时,没有错误日志信息。
有哪位能猜测到底发生了什么?以前是好的,但经过几次代码上的更新之后就慢慢出现了这个问题,我们仔细检查了源代码,表面上找不到任何问题。
[b]问题补充:[/b]
已将当机时的用户session信息已全部保存下来看了,没有发现问题。
2台tomcat,一台死掉的时候,另一台工作得好好的。