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文档
分享到:
相关推荐
本文将深入探讨六种关键的JVM监控工具——`jstack`, `jconsole`, `jinfo`, `jmap`, `jdb`, `jstat`——它们各自的功能、应用场景及如何帮助开发者和运维人员诊断并解决JVM中的复杂问题。 #### 1. jstack —— Java ...
本文将详细介绍`JStack`的使用方法及其在分析Java线程堆栈中的应用。 #### 二、JStack简介 `JStack`是Java Development Kit (JDK)的一部分,用于生成正在运行的Java应用程序的线程快照。这些快照提供了关于每个...
本文将详细介绍使用 jstack 工具定位分析 CPU 消耗问题的步骤和方法。 问题现象描述 在本例中,个人银行用户开户调用短信验证接口时,当大于 20 用户并发时,usercenter 服务的 CPU 使用率超过 100%。这表明存在...
本文将介绍五种JVM监控工具:jstack、jconsole、jinfo、jmap和jdb。 jstack jstack是一款命令行工具,用于生成Java应用程序的崩溃dump文件的信息。该工具可以attach到正在运行的Java应用程序中,查看当前运行的...
本文将对一些常用的 JVM 性能调优监控工具进行介绍,包括 jps、jstack、jmap、jhat、jstat 等工具的使用详解。这些工具对于 Java 程序员来说是必备的,能够帮助我们解决各种 JVM 性能问题,如 OutOfMemoryError、...
JDK14中性能管理工具之一的jstack,其主要功能是打印Java虚拟机(JVM)中的线程堆栈信息。该功能对于性能分析、问题诊断和调试都非常重要,尤其是在处理死锁、性能瓶颈或系统崩溃等异常情况时。jstack能够提供关于线程...
本篇将重点介绍几种常用的JVM监控工具,包括jstack、jconsole、jinfo、jmap以及jdb和jstat。 首先,`jstack`是一个用于打印Java线程堆栈跟踪的工具。当应用出现死锁或者线程阻塞时,jstack可以帮助我们查看各个线程...
在介绍如何使用jstack分析并解决Java进程中的死锁问题之前,我们首先需要了解什么是死锁以及它为何会在多线程程序中发生。在多线程环境中,当两个或多个线程在执行过程中因争夺资源而造成相互等待,这种状态被称为...
本文将介绍如何使用`top`和`jstack`两个工具来定位此类问题。 #### 定位步骤详解 1. **使用 top 命令找出占用 CPU 高的进程 PID** - `top`是一个实时显示系统状态的动态视图命令,可以用来监控系统的总体运行...
本文主要介绍了四个Java命令行工具:jps、jmap、jstack和jstat,它们是Java性能分析和故障排查的基础。 1. **jps (Java Process Status)**: 用于查看运行在本地机器上的Java进程ID,这对于其他命令来说是必需的输入...
介绍该项目用于分析Java堆栈跟踪,该项目可用于快速获取jvm状态的概述,或用作长时间分析状态的工具。 该工具可以准确地识别出性能的核心问题,然后需要对所识别出的问题进行进一步的分析。运行说明:,并将它们放入...
计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料计算机技术、IT咨询、人工智能AI理论介绍,学习...
本文将详细介绍JVM自带的一些核心监控工具,包括jstack、jconsole、jinfo、jmap、jdb和jstat等命令的使用方法。 #### jstack **概述:** jstack是一个强大的诊断工具,主要用于获取JVM中的线程快照。当Java程序...
根据给定文件中的标题、描述、标签以及部分内容,本文将详细介绍如何通过使用特定的Java工具如`jstat`, `jstack`, 和其他相关工具来进行Java线上系统的问题排查及快速定位。 ### java问题快速定位 #### Java线上...
"Java内存泄露_JVM监控工具介绍" Java内存泄露是Java开发中常见的一种问题,发生内存泄露可能会导致Java应用程序崩溃或性能下降。在Java中,内存泄露的原因非常多样,例如,静态变量、循环引用、数据库连接池、...
以下是几种常用的JVM监控工具的详细介绍: 1. **jstack**: `jstack` 是一个用于打印Java线程堆栈跟踪的工具,它可以帮助我们了解应用程序中线程的状态,比如是否发生死锁或者线程阻塞。通过指定进程ID,我们可以...
1. HouseMD介绍:文档的标题和描述暗示了这是一篇关于HouseMD的介绍。HouseMD是一种用于Java应用程序诊断的工具集,它可以帮助开发者快速定位和解决问题。HouseMD这个名字暗示了它的功能与医生类似,能够诊断出Java...
本篇将详细介绍JDK自带的几个主要调试工具,包括`jmap`、`jstack`、`jconsole`,以及相关的文档资源。 1. `jmap`:这是一个用于诊断堆内存状况的工具。通过`jmap`,我们可以获取到堆内存的详细映射,包括对象分配...
本文介绍了两种常见的JVM性能调优监控工具——`jps`和`jstack`的基本使用方法及实际应用场景。这些工具可以帮助开发者快速定位问题所在,提高系统的稳定性和响应速度。此外,对于更复杂的性能问题,还可以结合其他...