JVM如何查看线程死锁

Posted 微服务与大数据笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM如何查看线程死锁相关的知识,希望对你有一定的参考价值。

多线程开发中,最容易出现的问题就是死锁了。

那如何判断是否发生了死锁,谁产生了死锁呢?

jdk 中,有个自带工具,jstack. 无论是本地还是线上环境,都可以通过它,快速方便的查看问题。

jstack 是JVM内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等


我们先构建一个死锁线程,通过mian 方法执行,会产生一个java.exe进程。

每个进程,都会有自己的PID,用来唯一标识,就好比身份证号,每个人是不一样的。


  1. 先确认 该进程的PID 是多少,windows中,可在任务管理器查看:



2.在jdk 安装路径 jdk1.8.0_121\bin 中,我们打开控制台,输入:

jstack  7648


会输出如下结果:

可以看到红框中,Thread.state:BLOCKED.

明确的告诉我们,线程被锁住了。

随后又告知是哪个地方的代码导致的。

可快速定位问题。



没啦。


以上是关于JVM如何查看线程死锁的主要内容,如果未能解决你的问题,请参考以下文章

JVM调优常用参数

Java线程死锁查看分析方法

Java线程死锁查看分析方法

使用Windbg分析多线程临界区死锁问题分享

使用Windbg分析多线程临界区死锁问题分享

java 死锁