0 0

tomcat服务器僵死问题20

生产环境系统使用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版本等,设置更大的连接数(事实上只是延长了请求堆积的时间),没有效果。出错时,没有错误日志信息。

有哪位能猜测到底发生了什么?以前是好的,但经过几次代码上的更新之后就慢慢出现了这个问题,我们仔细检查了源代码,表面上找不到任何问题。
问题补充:
已将当机时的用户session信息已全部保存下来看了,没有发现问题。

2台tomcat,一台死掉的时候,另一台工作得好好的。
2009年4月09日 10:51

2个答案 按时间排序 按投票排序

0 0

采纳的答案

可以使用kill -QUIT pid的方式查看jvm的线程信息,也许可以帮助你解决问题。

2009年4月10日 00:16
0 0

我建议你记录更详细的日志,比如记录请求的IP地址、agent信息,可能是某个搜索引擎短时间发起大量请求?或者有人攻击你的网站?
还可记录每个线程(用filter实现)接受请求和完成请求的时间,用以判断是哪些线程开始长时间未完成。

2009年4月10日 12:21

相关推荐

Global site tag (gtag.js) - Google Analytics