一.问题描述
在tomcat上,压力测试(并行50,串行100,即5000次)的JAVA程序B44。
压测完毕后(压测试程序已执行完,tomcat也没有任何程序再跑)tomcat就假死了(访问tomcat没反应,无法显示该页)。
然后,再过两分钟,tomcat又能正常访问了,一切自动恢复正常。
二.分析问题
先后进行了多次测试,发现以下问题:
1.与写日志的线程无关。因为,改成了线程池也结果相同。
2.与写日志无关。因为,不写日志也结果相同。
3.与程序无关,我写了个最简单的JSP,压测也是这样。
4.与程序的运行时间有关,如果这个程序要运行好几百毫秒,反而不会假死。
5.用APACHE分发到多个TOMCAT,则会产生APACHE假死,而TOMCAT不会假死。如果有硬件负载均衡器分发到多个TOMCAT,估计也会产生与APACHE分发相同的结果。
6.与运行的web server无关。因为,在weblogic上运行也结果相同。
7.与内存无关,因为压测的过程中,内存变化不大。
8.与机器性能无关,先后在多次性能不同的机器上进行了测试,效果都相同。
9.与web server分配的堆栈大小无关,改大后反而报内存不足。
10.最后,发现非常关键的一点,假死时除了用IE访问地址报“无法打开该网页”外, 压测的程序都抛出同一例外信息“java.net.BindException: Address already in use: connect”。
所以,得出大概原因是:短时间内new socket操作很多,而socket.close()操作并不能立即释放绑定的端口,而是把端口设置为TIME_WAIT状态,过段时间(默认240s)才释放,(用netstat -na看到有好几千行被调用的端口为TIME_WAIT),最后系统资源耗尽(windows上是耗尽了pool of ephemeral ports,这段区间在1024-5000之间)。
三.解决办法
1.调高web服务器的最大连接线程数,即打开tomcat的server.xml文件,设置 Connector的以下参数:minProcessors="70" maxProcessors="2000" acceptCount="2000"
2.修改运行web服务器的机器的操作系统网络配置,即在注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters中增加以下两个DWORD参数:
MaxUserPort=fffe
TcpTimedWaitDelay=1e
最后,重新启动计算机。TcpTimedWaitDelay和MaxUserPort的参数作用详见TcpTimedWaitDelay和MaxUserPort作用及设置。
相关推荐
Linux定时脚本监控tomcat是否假死或出现运行异常,若出现异常则自动重启。
tomcat假死排查手册
检测Tomcat等网站假死,自动重启脚本,方便大家下载,可以参考修改。
Tomcat系统架构分析 深入学习tomcat 了解tomcat架构
tomcat常见问题分析tomcat常见问题分析
Tomcat的设计模式分析 很好的资料,值得看看
这些资源文档是本人在网上搜索了好多关于tomcat源码讲解的文章之后,觉得对tomcat6源码讲解不错的文章的整理,文档有别人分析,本人只是整理;
tomcat的基础脚本分析 tomcat的源码启动分析 tomcat的web应用启动分析 tomcat的socket分析 tomcat的cocket与容器对接时序分析
强烈推荐,涉及tomcat启动脚本catlina,原理,server结构分析,类加载器 tomcat权威指南等资料
介绍了tomcat的架构,从源码分析tomcat组成!
对tomcat的gclog日志进行分析,进行可视化展示,可以查看一些配置参数,检查是否软件是否运行正常
以类图,剪短的文字讲解了tomcat的架构。真正做到会用tomcat和懂tomcat内部运行机制。
tomcat源码分析,tomcat原理分析,底层机制,一些源代码等等
tomcat 源码分析系列文档 http深入分析,tomcat中类的加载,tomcat的启动,tomcat的容器思想,
Tomcat初始化流程分析,Tomcat启动流程分析 Tomcat处理一次请求过程分析 servlet初始化流程
tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat...
批量分析指定目录下的tomcat访问日志和iis日志
内含tomcat7 tomcat8 tomcat9免安装版本;供需要的人下载。
Tomcat启动分析以及如何启动 关于tomcat的配置及其代码
包含tomcat7,tomcat8,tomcat9,解压、在eclipse配置好即可。