JVM如何查看线程死锁
Posted 微服务与大数据笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM如何查看线程死锁相关的知识,希望对你有一定的参考价值。
多线程开发中,最容易出现的问题就是死锁了。
那如何判断是否发生了死锁,谁产生了死锁呢?
jdk 中,有个自带工具,jstack. 无论是本地还是线上环境,都可以通过它,快速方便的查看问题。
jstack 是JVM内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等
我们先构建一个死锁线程,通过mian 方法执行,会产生一个java.exe进程。
每个进程,都会有自己的PID,用来唯一标识,就好比身份证号,每个人是不一样的。
先确认 该进程的PID 是多少,windows中,可在任务管理器查看:
2.在jdk 安装路径 jdk1.8.0_121\bin 中,我们打开控制台,输入:
jstack 7648
会输出如下结果:
可以看到红框中,Thread.state:BLOCKED.
明确的告诉我们,线程被锁住了。
随后又告知是哪个地方的代码导致的。
可快速定位问题。
没啦。
以上是关于JVM如何查看线程死锁的主要内容,如果未能解决你的问题,请参考以下文章