JStack用于产生虚拟机当前时刻的线程快照;
即所有线程当前的堆栈状态,通过分析当前堆栈的状态我们可以知道当前线程在等待什么资源,占有什么资源.
通过分析各个线程占有的资源和等待的资源发现死锁问题等等。
我这里写了一个饥饿版哲学家思考问题,来产生死锁问题,代码可在https://github.com/Jaler/JavaAnalystTools下面的DiningPhilosophersHungryVersion.java获取大家可以参考
我将jstack主要信息列出,如下:
daisydeMacBook-Air:~ daisy$ jps
1099 DiningPhilosophers
daisydeMacBook-Air:~ daisy$ jstack 1099
"Philosopher4" #13 prio=5 os_prio=31 tid=0x00007fa3ba81f800 nid=0x5403 waiting for monitor entry [0x000000011e1e3000]
java.lang.Thread.State: BLOCKED (on object monitor)
at jaler.deadlock.Philosopher.eat(Philosopher.java:22)
waiting to lock (a jaler.deadlock.Chopstick)
locked (a jaler.deadlock.Chopstick)
at jaler.deadlock.Philosopher.run(Philosopher.java:38)
at java.lang.Thread.run(Thread.java:745)
"Philosopher3" #12 prio=5 os_prio=31 tid=0x00007fa3bb02e800 nid=0x5203 waiting for monitor entry [0x000000011e0e0000]
java.lang.Thread.State: BLOCKED (on object monitor)
at jaler.deadlock.Philosopher.eat(Philosopher.java:22)
waiting to lock (a jaler.deadlock.Chopstick)
locked (a jaler.deadlock.Chopstick)
at jaler.deadlock.Philosopher.run(Philosopher.java:38)
at java.lang.Thread.run(Thread.java:745)
"Philosopher2" #11 prio=5 os_prio=31 tid=0x00007fa3bb034000 nid=0x5003 waiting for monitor entry [0x000000011dfdd000]
java.lang.Thread.State: BLOCKED (on object monitor)
at jaler.deadlock.Philosopher.eat(Philosopher.java:22)
waiting to lock (a jaler.deadlock.Chopstick)
locked (a jaler.deadlock.Chopstick)
at jaler.deadlock.Philosopher.run(Philosopher.java:38)
at java.lang.Thread.run(Thread.java:745)
"Philosopher1" #10 prio=5 os_prio=31 tid=0x00007fa3bb8b9000 nid=0x4e03 waiting for monitor entry [0x000000011deda000]
java.lang.Thread.State: BLOCKED (on object monitor)
at jaler.deadlock.Philosopher.eat(Philosopher.java:22)
waiting to lock (a jaler.deadlock.Chopstick)
locked (a jaler.deadlock.Chopstick)
at jaler.deadlock.Philosopher.run(Philosopher.java:38)
at java.lang.Thread.run(Thread.java:745)
"Philosopher0" #9 prio=5 os_prio=31 tid=0x00007fa3ba81f000 nid=0x4c03 waiting for monitor entry [0x000000011ddd7000]
java.lang.Thread.State: BLOCKED (on object monitor)
at jaler.deadlock.Philosopher.eat(Philosopher.java:22)
waiting to lock (a jaler.deadlock.Chopstick)
locked (a jaler.deadlock.Chopstick)
at jaler.deadlock.Philosopher.run(Philosopher.java:38)
at java.lang.Thread.run(Thread.java:745)
我们就近分析Philosopher0线程,它当前状态State is BLOCKED, lock了0x00000007aabee7d8, 等待lock 0x00000007aabee7e8. 而0x00000007aabee7e8 被线程 Philosopher1 lock了,但线程Philosopher1 在等待获取0x00000007aabee7f8...最终结果就是每个哲学家持有一个锁不放手,而且在等待另外一个锁。最终谁都吃不上。
我们现在已经大概能看懂jstack信息了,并且知道它一般用来分析死锁问题,接下来我们对这个命令进行一些详细的介绍: daisydeMacBook-Air:~ daisy$ jstack -help Usage:
jstack [-l] (to connect to running process)
jstack -F [-m] [-l] (to connect to a hung process)
jstack [-m] [-l] (to connect to a core file)
jstack [-m] [-l] [server_id@] (to connect to a remote debug server)
Options:
-F to force a thread dump. Use when jstack does not respond (process is hung)
-m to print both java and native frames (mixed mode)
-l long listing. Prints additional information about locks
-h or -help to print this help message 帮助说的很清楚, jstack可以跟4个参数:
-F 当jstack无法输出时,加上-F可以强制输出
-m 除了打印java堆栈信息外,还输出native方法的堆栈信息;当需要分析native调用时可以使用
-l 打印更多锁的信息
-h help文档
分享到:
相关推荐
主要介绍了Java线程Dump分析工具jstack解析及使用场景,具有一定借鉴价值,需要的朋友可以参考下
JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jstat.doc
Java内存泄露_JVM监控工具介绍jstack_jconsole_jinfo_jmap_jdb_jstat
jstack工具主要用来打印java堆栈信息,主要是java的class名字,方法名,字节码索引,行数等信息。这篇文章主要介绍了JDK14性能管理工具之jstack使用介绍,需要的朋友可以参考下
主要介绍了如何通过jstack命令dump线程信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了通过jstack分析解决进程死锁问题实例代码,具有一定借鉴价值,需要的朋友可以参考下
主要介绍了jstack和线程dump实例解析,具有一定借鉴价值,需要的朋友可以参考下
介绍该项目用于分析Java堆栈跟踪,该项目可用于快速获取jvm状态的概述,或用作长时间分析状态的工具。 该工具可以准确地识别出性能的核心问题,然后需要对所识别出的问题进行进一步的分析。运行说明:,并将它们放入...
本文档从实战角度出发,介绍jps、jmap、jstack和jstat这四个命令的常用方式。 jps 作用:获取java进程号,是后续命令的基础。 当一台服务器运行多个java进程时,该命令默认只输出进程号和应用名,可能无法区分哪个...
NULL 博文链接:https://kennylee26.iteye.com/blog/1402260
主要介绍了JVM---jstack分析Java线程CPU占用,线程死锁的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jsta
JVM监控工具介绍:详细介绍jstack, jconsole, jinfo, jmap, jdb, jstat 等命令的使用方法
这篇文章将为你介绍这三种编程语言的特点和学习技巧。 ## C++ C++是一种面向对象的高级编程语言,具有高效、灵活、可移植等特点。学习C++需要掌握基本的语法和面向对象的思想,熟悉STL库和模板的使用,了解多线程...
jvm相关工具,jmap, jstack,jstat,jconsole等一系列的工具的介绍。很全面。书籍很清晰。
│ 高并发编程第一阶段19讲、结合jconsole,jstack以及汇编指令认识synchronized关键字.mp4 │ 高并发编程第一阶段20讲、同步代码块以及同步方法之间的区别和关系.mp4 │ 高并发编程第一阶段21讲、通过实验分析...
│ 高并发编程第一阶段19讲、结合jconsole,jstack以及汇编指令认识synchronized关键字.mp4 │ 高并发编程第一阶段20讲、同步代码块以及同步方法之间的区别和关系.mp4 │ 高并发编程第一阶段21讲、通过实验分析...
在局域网内的Linux 服务器 或 Windows开发机上又不能重现这个问题, 联想到Java的jstack, 很是羡慕啊. 想到.net core 已经出来这么久了, 还是试着找找看吧, 结果还真找到一篇博客Introducing diagnostics ...
├─4.07 jvm运维实用排障工具-jps-jstack.mp4 ├─4.08 jvm运维实用排障工具-jinfo-jstat.mp4 ├─4.09 jvm运维实用监控工具-virtualvm安装-安装插件.mp4 ├─4.10 jvm运维实用监控工具-如何监控jvm.mp4 ├─5.01 ...
介绍我正在开发应用程序,需要将通知发送到iOS设备。 在过去的一年中,我使用了 ,我认为它比其他库(例如JavaPNS等)要好得多。 但是仍然存在一些问题。 例如,有时会引发异常:java.lang.StackOverflowError。 一...