问题

应用在大批量任务执行一段时间进入假死状态。

排查

dump java进程
jmap -dump:format=b,file=20201020.dump 726
726是进程号
结果通过mat分析,没啥问题。

jstat -gcutil 726 5000
jstat -gcutil pid 时间间隔毫秒
每隔5秒 输出进程726 垃圾回收情况
jvm监控三板斧实战-进程假死排查:jmap、jstat、jstack
这里也是正常的

查看死锁
jstack -F pid
jstack -F 726
jvm监控三板斧实战-进程假死排查:jmap、jstat、jstack
死锁到没有,但是有很多数据源线程阻塞。
因此复盘代码,存在数据库连接没有主动释放。
调整:对使用connection、statement、resultset,在使用后主动close,释放。

总结

通过工具的监控和分析,可以帮助咱们快速定位一些问题。尤其是在整个问题不明显的情况,比如这种进程假死状态,是没有异常抛出的。

相关文章: