表象:
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宕机 假死