使用Tomcat作为Web服务器的时候偶尔会遇到Tomcat停止响应的情况,通过netstat查看端口情况会发现tomcat的端口出现大量的CLOSE_WAIT,此时Tomcat会停止响应前端请求,同时服务端的日志,操作等将全部停止,而且没有出现任何异常,此时就需要排查是哪方面的原因,此案以以前的解决为例总结排查方案

  

  1、首先确认页面端正常时请求没有问题

  2、对于使用Nginx作为前端负载均衡Tomcat集群,通过Nginx的访问日志(access.log)确认页面到Nginx没有问题

  3、查看Tomcat的访问日志(localhost_access_log.txt)查看前端请求是否访问到Tomcat

    

  4、查看Tomcat的状态控制台,查看Tomcat的请求和内存占用情况

    

    查看那些请求处于等待状态,排查这些请求的服务是否存在问题(长事务、频繁事务)

  5、查看数据库进程查看当前数据库实例是否出现死锁

    

    如果出现死锁,排查代码中出现死锁的原因,解决死锁问题

  6、如果以上都没有问题,排查代码中的定时任务

    查看定时任务事务是否存在问题(长事务、频繁事务)

  7、检查是否是频繁的写日志造成Tomcat阻塞

    对于访问量比较大的系统,如果项目采用Info或者Debug日志级别的话会造成Tomcat频繁的读写几百兆甚至上G的日志文件,造成Tomcat阻塞

曾经遇到的一次Tomcat出现CLOSE_WAIT时,通过排查发现是一位同事在通过定时任务做其他系统的数据同步时时出现的问题造成的,问题总结如下:
  1、同步其他系统的数据是耗时较长,其采用Spring的切面事务,造成同步时事务时间长达几分钟时间,存在死锁风险
  2、同步数据完需要处理数据,此时的处理数据逻辑会存在多达几万次的数据库变更,当前操作没有采用切面事务,而是采用框架的AutoCommit自动提交事务,这样就会造成处理数据时出现几万次的创建事务,提交事务,关闭事务,此时造成事务阻塞

解决方案:
  1、处理时间较长的操作,如果当前操作中间出现问题对业务没有影响下次操作时会修正当前业务,这样的话可以不适用切面事务而是使用框架的AutoCommit提交事务,如果当前操作确实需要保证原子性时,请手动回复数据装填
  2、不要频繁的开启、提交事务,采用批量的方式提交事务

Tomcat假死排查方案的更多相关文章

  1. tomcat 假死现象(转)

    1.1 编写目的 为了方便大家以后发现进程假死的时候能够正常的分析并且第一时间保留现场快照. 1.2编写背景 最近服务器发现tomcat的应用会偶尔出现无法访问的情况.经过一段时间的观察最近又发现有台 ...

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

    最近系统二次开发之后,发现使用的 Tomcat 7 会经常假死.前端点击页面无任何反应,打开firebug,很多链接一直在等待服务器的反应.查看服务器的状态,CPU占用很少,最多不超过10%,一般只有 ...

  3. tomcat 假死

    1.1 编写目的 为了方便大家以后发现进程假死的时候能够正常的分析并且第一时间保留现场快照.1.2编写背景最近服务器发现tomcat的应用会偶尔出现无法访问的情况.经过一段时间的观察最近又发现有台to ...

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

    最近发现使用的Tomcat 7会经常假死.前端点击页面无任何反应,打开firebug,很多链接一直在等待服务器的反应.查看服务器的状态,CPU占用很少,最多不超过10%,一般只有2%,3%左右,内存占 ...

  5. tomcat假死现象 - 二

    1 编写背景 最近服务器发现tomcat的应用会偶尔出现无法访问的情况.经过一段时间的观察最近又发现有台tomcat的应用出现了无法访问情况.简单描述下该台tomcat当时具体的表现:客户端请求没有响 ...

  6. tomcat假死现象(转)

    1.1 编写目的 为了方便大家以后发现进程假死的时候能够正常的分析并且第一时间保留现场快照. 1.2编写背景 最近服务器发现tomcat的应用会偶尔出现无法访问的情况.经过一段时间的观察最近又发现有台 ...

  7. Tomcat假死的原因及解决方案

    服务器配置:linux+tomcat 现象:Linux服务器没有崩,有浏览器中访问页面,出现无法访问的情况,没有报4xx或5xx错误(假死),并且重启tomcat后,恢复正常. 原因:tomcat默认 ...

  8. 分析java进程假死状况

    摘自: http://www.myexception.cn/internet/2044496.html 分析java进程假死情况 1 引言 1.1 编写目的 为了方便大家以后发现进程假死的时候能够正常 ...

  9. 记一次生产事故的排查与优化——Java服务假死

    一.现象 在服务器上通过curl命令调用一个Java服务的查询接口,半天没有任何响应.关于该服务的基本功能如下: 1.该服务是一个后台刷新指示器的服务,即该服务会将用户需要的指示器数据提前计算好,放入 ...

随机推荐

  1. java学习de路线建议

    我想谈一谈我的一些关于网页学习的小感悟吧.之所以是写这个的原因完全是想告诉现在还处在网页学习的初始阶段的同学一些我学习走过的弯路,但我说的也仅是我个人的理解,毕竟我只能是JavaWeb开发的新手,所以 ...

  2. 关于注册github

  3. java语言复制数组的四种方法

    JAVA语言的下面几种数组复制方法中,哪个效率最高? B.效率:System.arraycopy > clone > Arrays.copyOf > for循环 1.System.a ...

  4. 【第七周】B-1分数发布

    组名: 新蜂 组长: 武志远 组员: 宫成荣 谢孝淼 杨柳 李峤 项目名称: java俄罗斯方块 由于排名信息过于敏感,由以下方式进行. 宫成荣 = 魑,谢孝淼 = 魅,武志远 =   魉,杨柳 =  ...

  5. mysql 时间格式化参数表笔记

    DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据. 语法: DATE_FORMAT(date,format) 实例: DATE_FORMAT(NOW(),'%b %d %Y %h:% ...

  6. [转帖]Docker五种存储驱动原理及应用场景和性能测试对比

    Docker五种存储驱动原理及应用场景和性能测试对比 来源:http://dockone.io/article/1513 作者: 陈爱珍 布道师@七牛云   Docker最开始采用AUFS作为文件系统 ...

  7. SQL DATACOMPARE 实现两个数据库的同步处理.

    1. SQL DATACOMPARE 实现 两个数据库的同步 安装破解. 然后进行对比 然后进行 deploy 生成sql 等. 貌似很好用 但是前提是数据库是可用的... 这里面能够看到 生成的脚本 ...

  8. [转帖]DAS、SAN、NAS

    http://blog.itpub.net/26736162/viewspace-2214368/ DAS(Direct-attached Storage) 直连存储 直连式存储与服务器主机之间的连接 ...

  9. 微信小程序 功能函数 openid本地和网络请求

    本地-------------------------------------------------------------------------------------------------- ...

  10. springcloud微服务实战:Eureka+Zuul+Feign/Ribbon+Hystrix Turbine+SpringConfig+sleuth+zipkin

    相信现在已经有很多小伙伴已经或者准备使用springcloud微服务了,接下来为大家搭建一个微服务框架,后期可以自己进行扩展.会提供一个小案例: 服务提供者和服务消费者 ,消费者会调用提供者的服务,新 ...