Tomcat假死

具体的表现:客户端请求没有响应,查看服务器端 tomcat 的 java 进程存在,查看 tomcat 的 catalina.log,没有发现异常,也没有 error 日志,查看 localhost_access.log 也没有最新的访问日志,该台 tomcat 已不能提供服务。

根据前面的假死表象,最先想到的是网络是否出现了问题,于是开始从请求的数据流程开始分析。业务的架构采用的是 nginx + tomcat 的集群配置。

如果是网络的原因,可以从两个点进行分析。

1. 从前端到 nginx 的网络情况

  分析 nginx 上的 access.log,可以查出当时该条请求的访问日志,也就是说可以排除这段网络的问题。

2. 从 nginx 到 tomcat 的网络情况

  分析 tomcat 的访问日志 localhost_access.log,没有查到该条请求的访问日志。可以怀疑是否网络有问题,从 nginx 上 ping 一下 tomcat server,网络正常。开始怀疑是 tomcat 本身的问题,在 tomcat 本机直接 curl 调用该条请求,发现仍然没有响应。到此基本可以断定网络没有问题,tomcat 本身出现了假死的情况。

造成 tomcat 假死的情况大概有以下几种:

1. JVM 内存溢出

grep OutOfMemoryException catalina.sh,查看是否有内存溢出的情况。

2. JVM GC 时间过长,导致应用暂停

3. 服务负载过高

top 命令查看系统负载情况

4. 应用程序本身的问题,造成死锁

jstack,有少量线程处于TIMED_WAITING。

5. TIME_WAIT

netstat -ant | awk ‘ /^tcp/ {++S[$NF]} END {for (a in S) print a,S[a]} ‘,统计机器中 TCP 连接各个状态数目

6. CLOSE_WAIT

常用的三个状态是:ESTABLISHED 表示正在通信,TIME_WAIT 表示主动关闭,CLOSE_WAIT 表示被动关闭。

CLOSE_WAIT 状态,就是在对方关闭连接之后,服务器程序没有进一步发出 ACK 信号。换句话说,就是在对方连接关闭之后,程序里没有检测到,或者程序压根就忘记了这个时候需要关闭连接,于是这个资源就一直被程序占用着。检查代码吧。

原文地址:https://www.cnblogs.com/yutb/p/11457987.html

时间: 2024-08-28 16:34:21

Tomcat假死的相关文章

TCP连接的TIME_WAIT过多导致 Tomcat 假死

最近发现使用的Tomcat 7会经常假死.前端点击页面无任何反应,打开firebug,很多链接一直在等待服务器的反应.查看服务器的状态,CPU占用很少,最多不超过10%,一般只有2%,3%左右,内存占用倒是接近80, 90%.一开始怀疑是tomcat内存配置不够,但是打开 jvisualvm.exe 分析,发现Tomcat 占用的堆内存没有什么问题.因为是假死,所以最后怀疑到 tomcat的 链接数和 数据库的链接数的配置估计太小了.netstat -na 结果页显示很多time_wait. 查

tomcat 假死

1.1 编写目的 为了方便大家以后发现进程假死的时候能够正常的分析并且第一时间保留现场快照.1.2编写背景最近服务器发现tomcat的应用会偶尔出现无法访问的情况.经过一段时间的观察最近又发现有台tomcat的应用出现了无法访问情况.简单描述下该台tomcat当时具体的表现:客户端请求没有响应,查看服务器端tomcat的进程是存活的,查看业务日志的时候发现日志停止没有任何最新的访问日志.连tomcat下面的catalina.log也没有任何访问记录,基本断定该台tomcat已不能提供服务.2 分

tomcat 假死现象(转)

1.1 编写目的 为了方便大家以后发现进程假死的时候能够正常的分析并且第一时间保留现场快照. 1.2编写背景 最近服务器发现tomcat的应用会偶尔出现无法访问的情况.经过一段时间的观察最近又发现有台tomcat的应用出现了无法访问情况.简单描述下该台tomcat当时具体的表现:客户端请求没有响应,查看服务器端tomcat的进程是存活的,查看业务日志的时候发现日志停止没有任何最新的访问日志.连tomcat下面的catalina.log也没有任何访问记录,基本断定该台tomcat已不能提供服务.

Tomcat假死的原因及解决方案

服务器配置:linux+tomcat 现象:Linux服务器没有崩,有浏览器中访问页面,出现无法访问的情况,没有报4xx或5xx错误(假死),并且重启tomcat后,恢复正常. 原因:tomcat默认最大连接数(线程数)200个,默认每一个连接的生命周期2小时(7200秒),tomcat使用http 1.1协议,而http1.1默认是长连接.tomcat接受处理完请求后,socket没有主动关闭,因此如果在2小时内,请求数超过200个,服务器就会出现上述假死现象. 解决方案1:及时断开socke

Tomcat假死排查方案

使用Tomcat作为Web服务器的时候偶尔会遇到Tomcat停止响应的情况,通过netstat查看端口情况会发现tomcat的端口出现大量的CLOSE_WAIT,此时Tomcat会停止响应前端请求,同时服务端的日志,操作等将全部停止,而且没有出现任何异常,此时就需要排查是哪方面的原因,此案以以前的解决为例总结排查方案 1.首先确认页面端正常时请求没有问题 2.对于使用Nginx作为前端负载均衡Tomcat集群,通过Nginx的访问日志(access.log)确认页面到Nginx没有问题 3.查看

Tomcat假死之问题原因排查

一.怀疑JVM内存溢出 排除 二.怀疑JVM垃圾回收时间过长 排除 三.怀疑死锁(暂未排除) 四.怀疑TCP状态CLOSE_WAIT(被动关闭连接) 五.怀疑数据库连接耗尽 <!--proxool连接池监控页面 --> <servlet> <servlet-name>DbPoolAdmin</servlet-name> <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminSer

tomcat假死 (原因及解决办法)

一.怀疑JVM内存溢出 表现:tomcat就连续抛java.lang.OutOfMemoryError的错误 1.首先是:java.lang.OutOfMemoryError: Java heap space 解释: Heap size 设置 JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4.可以利用JVM提供的-Xmn -Xms -

rabbitMQ队列处理导致连接池耗尽Tomcat假死问题排查处理

背景: 监听器针对RabbitMQ队列做业务数据处理 系统问题表现: 业务系统无法正常使用,所有请求均不予相应,报404异常 控制台问题表现: 接收队列数据的logger日志打印,但是相关sql不打印(之前sql打印) 报错异常: dbcp连接池(开始使用) [WARN ] 19:01:05.762 [SimpleAsyncTaskExecutor-1] o.h.util.JDBCExceptionReporter - SQL Error: 1040, SQLState: 08004 [ERRO

分析java进程假死状况

摘自: http://www.myexception.cn/internet/2044496.html 分析java进程假死情况 1 引言 1.1 编写目的 为了方便大家以后发现进程假死的时候能够正常的分析并且第一时间保留现场快照. 1.2编写背景 最近服务器发现tomcat的应用会偶尔出现无法访问的情况.经过一段时间的观察最近又发现有台tomcat的应用出现了无法访问情况.简单描述下该台tomcat当时具体的表现:客户端请求没有响应,查看服务器端tomcat的进程是存活的,查看业务日志的时候发