`

TOMCAT假死分析

阅读更多

一.问题描述

        在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作用及设置

 

文章来源:http://wenku.baidu.com/link?url=TeFOSNVSTfC8J23WlKQdMI-bUhEQ4jmdJkUuw4PnFdDe4mQrNJLwwzsQFjSOIoOK9luzgsodPnkLWgA8rMrwYjpqiAIRMuif3JiQK9lEhBG

分享到:
评论

相关推荐

    Linux脚本监控tomcat假死与异常

    Linux定时脚本监控tomcat是否假死或出现运行异常,若出现异常则自动重启。

    检测Tomcat等网站假死,自动重启脚本

    检测Tomcat等网站假死,自动重启脚本,方便大家下载,可以参考修改。

    tomcat6源码分析

    《Tomcat6源码分析——深入理解Web服务器的运行机制》 Tomcat6作为Apache软件基金会的Jakarta项目的一部分,是一款广泛使用的Java Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范,为开发和部署...

    tomcat 学习与分析总结资料

    《Tomcat学习与分析总结资料》是一份涵盖了Tomcat服务器核心知识的综合资源,适合对Java Web应用服务器感兴趣的开发者深入学习。Tomcat是Apache软件基金会的项目,是世界上最流行的开源Servlet容器,它实现了Java ...

    tomcat源码分析图谱

    tomcat的基础脚本分析 tomcat的源码启动分析 tomcat的web应用启动分析 tomcat的socket分析 tomcat的cocket与容器对接时序分析

    tomcat常见问题分析

    在分析Tomcat常见问题时,我们经常会遇到各种各样的错误,这些错误可能涉及到服务器配置、依赖库、系统环境以及应用程序本身。以下是一些常见的问题及其解决方案: 首先,Jdk版本不匹配是导致Tomcat无法正常运行的...

    tomcat架构的源码分析

    ### Tomcat架构的源码分析 #### 一、Tomcat的架构概述 Tomcat作为一款广泛使用的开源Java Servlet容器,其内部架构设计简洁而高效。本文档将对Tomcat的架构进行详细介绍,并从源码层面深入分析其核心组成部分。...

    Tomcat gclog日志分析工具HPjmeter

    对tomcat的gclog日志进行分析,进行可视化展示,可以查看一些配置参数,检查是否软件是否运行正常

    tomcat 源码分析系列文档

    4. "Tomcat源码分析(4)容器处理链接之责任链模式.doc":分析了Tomcat如何利用责任链模式来处理请求,使得请求可以被多个处理器(如过滤器)有序处理。 5. "tomcat加载类的顺序.doc":详细说明了Tomcat加载类的具体...

    TOMCAT源代码,包括转载得别人的分析

    以下是对Tomcat源码及其分析的一些关键知识点: 1. **Servlet与JSP**: Tomcat的核心在于Servlet容器,它负责处理HTTP请求并调用相应的Servlet来生成响应。Servlet是Java平台上的服务器端组件,用于生成动态Web...

    tomcat7tomcat8tomcat9

    Tomcat是Apache软件基金会下的一个开源项目,是一个广泛使用的Java Servlet容器,特别因为其轻量级、高效能和稳定性而闻名。它实现了Java Servlet和JavaServer Pages(JSP)规范,使得开发者能够用Java语言来编写...

    tomcat7,tomcat8,tomcat9

    Tomcat7、Tomcat8和Tomcat9是不同版本的Tomcat,每个版本都有其特性和改进。 **Tomcat7**: Tomcat7是2011年发布的,它主要支持Java Servlet 3.0和JSP 2.2规范。这个版本引入了一些重要改进,包括增强的安全性、更...

    tomcat5.5tomcat最新客户端

    tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat...

    tomcat 最全源码分析

    对 NIO 模式,请求的流程描述的很详细。值得去仔细的研究。

    自动监控 Windows平台Tomcat运行监控并自动重启

    1. **日志分析**:定期分析Tomcat的日志,找出导致服务假死或异常的常见原因,优化系统配置或代码以减少这类问题的发生。 2. **故障转移**:如果可能,可以设置Tomcat集群,当一个节点出现问题时,流量可以自动切换...

Global site tag (gtag.js) - Google Analytics