TOMCAT假死报告

TOMCAT假死报告


2024年4月12日发(作者:)

问题描述

在tomcat上,压力测试(并行50,串行100,即5000次)的JAVA程序B44。

压测完毕后(压测试程序已执行完,tomcat也没有任何程序再跑)tomcat就假死了(访

问tomcat没反应,无法显示该页)。

然后,再过两分钟,tomcat又能正常访问了。一切自动恢复正常。

分析问题

先后进行了多次测试,发现以下问题:

 与写日志的线程无关。因为,改成了线程池也结果相同。

 与写日志无关。因为,不写日志也结果相同。

 与程序无关,我写了个最简单的JSP,压测也是这样。

 与程序的运行时间有关,如果这个程序要运行好几百毫秒(如:M04),反而不会

假死。

 如果,用APACHE分发到多个TOMCAT,则会产生APACHE假死,而TOMCAT不会

假死。

 如果有硬件负载均衡器分发到多个TOMCAT。估计也会产生与APACHE分发,相同

的结果。

 与运行的web server无关。因为,在weblogic上运行也结果相同。

 与内存无关,因为压测的过程中,内存变化不大。

 与机器性能无关,先后在多次性能不同的机器上进行了测试,效果都相同。

 与web server分配的堆栈大小无关,改大后反而报内存不足。

 最后,发现非常关键的一点假死时,除了用IE访问地址报“无法打开该网页”外,

压测的程序都抛出同一例外信息“ception: Address already in use:

connect”。

 最终,得出大概原因是短时间内new socket操作很多,而()操作并不能

立即释放绑定的端口,而是把端口设置为TIME_WAIT状态,过段时间(默认240s)才释

放,(用netstat -na看到有好几千行被调用的端口为TIME_WAIT),最后系统资源耗尽

(windows上是耗尽了pool of ephemeral ports ,这段区间在1024-5000之间; )

解决办法

1) 调高web服务器的最大连接线程数,即打开tomcat的文件,设置

Connector的以下参数:minProcessors="70" maxProcessors="2000"

acceptCount="2000"

2) 修改运行web服务器的机器的操作系统网络配置,即在注册表

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters中增加

以下两个DWORD参数:

MaxUserPort=fffe

TcpTimedWaitDelay=1e

最后,重新启动计算机。


发布者:admin,转转请注明出处:http://www.yc00.com/web/1712918966a2147917.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信