问题
应用在大批量任务执行一段时间进入假死状态。
排查
dump java进程
jmap -dump:format=b,file=20201020.dump 726
726是进程号
结果通过mat分析,没啥问题。
jstat -gcutil 726 5000
jstat -gcutil pid 时间间隔毫秒
每隔5秒 输出进程726 垃圾回收情况
这里也是正常的
查看死锁
jstack -F pid
jstack -F 726
死锁到没有,但是有很多数据源线程阻塞。
因此复盘代码,存在数据库连接没有主动释放。
调整:对使用connection、statement、resultset,在使用后主动close,释放。
总结
通过工具的监控和分析,可以帮助咱们快速定位一些问题。尤其是在整个问题不明显的情况,比如这种进程假死状态,是没有异常抛出的。