jdk工具jvm堆栈调试,解决tomcat服务宕机无法访问,跟踪发现log4j死锁

表象:

tomcat单机环境(app端+后台管理),程序刚启动起来所有请求正常,几分钟过后某一个业务模块无法访问,无任务请求日志,其它模块都能正常使用。

解决思路:

1、疑似代码内部事务处理机制错误,造成死锁,把所有主动事务全部取消,依然不能解决任务问题,还是一样。
2、增加tomcat连接数,无任何反应。

3、内部代码优化,表建索引、建视图,宕机频率有所下降,但是当app和后台同时访问一个模块,又是瞬间宕机,没有解决根本性问题。

4、通过jstack方式查看tomcat 的堆日志,跟踪每个线程的

进入windows  cmd界面输入命令:jstack -l pid  

pid为进程的id ,进程 id 在 :    查看 -  选择列  - 勾选 pid  ,显示出来

 

 这种日志显示不是很方便;还有一种界面化的工具可以更方便的查看tomcat堆内存的使用

5、jvisualvm工具

在安装的jdk的bin目录下面运行:jvisualvm.exe

启动tomcat后可以看到左边菜单栏tomcat进程,监视 - 堆dump 就可以看到dump内存的运行情况,

 

 最终发现了线程blocked 异常

 

是由于log4j日志导致的死锁,程序直接阻塞,导致tomcat宕机 假死

 

posted on 2018-08-07 15:48  花少灬  阅读(408)  评论(0编辑  收藏  举报

导航