Java死锁检测以及解决办法
一、什么是死锁?
两个或者多个线程互相持有对方所需要的资源(锁), 都在等待对方执行完毕才能继续往下执行的时候,就称为发生了死锁。结果就是两个进程都陷入了无限的等待中。一般是有多个锁对象的情况下并且获得锁顺序不一致造成的。
三、死锁检测
1. jps
jps -l
查看所有的jvm进程,包括进程ID,进程启动的路径等等。
如下图:
2. jstack
jstack [pid]
jstack命令用于生成虚拟机当前时刻的线程快照。通过这个命令,可以观察jvm中当前所有线程的运行情况和线程当前状态。
执行命令:jstack 10928,截取部分运行结果,如下图:
3. 可视化工具 jconsole
从Java 5开始 引入了 JConsole,JConsole 是一个内置 Java 性能分析器。我们可以JConsole(或者,更高端的升级版jvisualvm)来监控 Java 应用程序性能和跟踪 Java 中的代码,包括死锁检测。
4. 可视化工具 visual VM
标签:解决办法,Java,检测,jstack,死锁,线程,JConsole From: https://www.cnblogs.com/hld123/p/18538074