jstack 线程栈分析工具

jstack是JDK自带的线程栈分析工具,它可以生成当前JVM所有线程信息的快照,我们可以查看虚拟机中都有哪些线程,以及各个线程是在正常运行还是等待资源,进而定位死锁等问题。

jstack <pid>
  • -l参数:使用jstack -l <pid>能够额外打印锁信息,该参数用于定位死锁问题

一个输出信息的例子如下。

2023-01-26 13:42:30
Full thread dump OpenJDK 64-Bit Server VM (11.0.2+9 mixed mode):

Threads class SMR info:
_java_thread_list=0x000001d7a3e25be0, length=11, elements={
0x000001d787b95000, 0x000001d7a31f8000, 0x000001d7a3223800, 0x000001d7a3b43000,
0x000001d7a3248800, 0x000001d7a324a800, 0x000001d7a324b800, 0x000001d7a325e000,
0x000001d787c5a000, 0x000001d7a3e1f000, 0x000001d7a3e22000
}

"main" #1 prio=5 os_prio=0 cpu=0.00ms elapsed=3626.65s tid=0x000001d787b95000 nid=0x5238 in Object.wait()  [0x000000387bffe000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(java.base@11.0.2/Native Method)
        - waiting on <0x00000000fff068b0> (a java.lang.Thread)
        at java.lang.Thread.join(java.base@11.0.2/Thread.java:1305)
        - waiting to re-lock in wait() <0x00000000fff068b0> (a java.lang.Thread)
        at java.lang.Thread.join(java.base@11.0.2/Thread.java:1379)
        at com.gacfox.demo.Main.main(Main.java:7)

"Reference Handler" #2 daemon prio=10 os_prio=2 cpu=0.00ms elapsed=3626.64s tid=0x000001d7a31f8000 nid=0x5528 waiting on condition  [0x000000387c6ff000]
   java.lang.Thread.State: RUNNABLE
        at java.lang.ref.Reference.waitForReferencePendingList(java.base@11.0.2/Native Method)
        at java.lang.ref.Reference.processPendingReferences(java.base@11.0.2/Reference.java:241)
        at java.lang.ref.Reference$ReferenceHandler.run(java.base@11.0.2/Reference.java:213)

"Finalizer" #3 daemon prio=8 os_prio=1 cpu=0.00ms elapsed=3626.64s tid=0x000001d7a3223800 nid=0x97c0 in Object.wait()  [0x000000387c7fe000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(java.base@11.0.2/Native Method)
        - waiting on <0x00000000fff08f10> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(java.base@11.0.2/ReferenceQueue.java:155)
        - waiting to re-lock in wait() <0x00000000fff08f10> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(java.base@11.0.2/ReferenceQueue.java:176)
        at java.lang.ref.Finalizer$FinalizerThread.run(java.base@11.0.2/Finalizer.java:170)

"Signal Dispatcher" #4 daemon prio=9 os_prio=2 cpu=0.00ms elapsed=3626.64s tid=0x000001d7a3b43000 nid=0x9bac runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Attach Listener" #5 daemon prio=5 os_prio=2 cpu=0.00ms elapsed=3626.64s tid=0x000001d7a3248800 nid=0x2c4c waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread0" #6 daemon prio=9 os_prio=2 cpu=0.00ms elapsed=3626.64s tid=0x000001d7a324a800 nid=0x89e4 waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE
   No compile task

"C1 CompilerThread0" #14 daemon prio=9 os_prio=2 cpu=0.00ms elapsed=3626.64s tid=0x000001d7a324b800 nid=0x3f58 waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE
   No compile task

"Sweeper thread" #18 daemon prio=9 os_prio=2 cpu=0.00ms elapsed=3626.63s tid=0x000001d7a325e000 nid=0x7b40 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Common-Cleaner" #19 daemon prio=8 os_prio=1 cpu=0.00ms elapsed=3626.62s tid=0x000001d787c5a000 nid=0x933c in Object.wait()  [0x000000387cdff000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(java.base@11.0.2/Native Method)
        - waiting on <0x00000000ffe2b920> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(java.base@11.0.2/ReferenceQueue.java:155)
        - waiting to re-lock in wait() <0x00000000ffe2b920> (a java.lang.ref.ReferenceQueue$Lock)
        at jdk.internal.ref.CleanerImpl.run(java.base@11.0.2/CleanerImpl.java:148)
        at java.lang.Thread.run(java.base@11.0.2/Thread.java:834)
        at jdk.internal.misc.InnocuousThread.run(java.base@11.0.2/InnocuousThread.java:134)

"Monitor Ctrl-Break" #20 daemon prio=5 os_prio=0 cpu=0.00ms elapsed=3626.59s tid=0x000001d7a3e1f000 nid=0xb804 runnable  [0x000000387d1fe000]
   java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(java.base@11.0.2/Native Method)
        at java.net.SocketInputStream.socketRead(java.base@11.0.2/SocketInputStream.java:115)
        at java.net.SocketInputStream.read(java.base@11.0.2/SocketInputStream.java:168)
        at java.net.SocketInputStream.read(java.base@11.0.2/SocketInputStream.java:140)
        at sun.nio.cs.StreamDecoder.readBytes(java.base@11.0.2/StreamDecoder.java:284)
        at sun.nio.cs.StreamDecoder.implRead(java.base@11.0.2/StreamDecoder.java:326)
        at sun.nio.cs.StreamDecoder.read(java.base@11.0.2/StreamDecoder.java:178)
        - locked <0x00000000ffdfa460> (a java.io.InputStreamReader)
        at java.io.InputStreamReader.read(java.base@11.0.2/InputStreamReader.java:185)
        at java.io.BufferedReader.fill(java.base@11.0.2/BufferedReader.java:161)
        at java.io.BufferedReader.readLine(java.base@11.0.2/BufferedReader.java:326)
        - locked <0x00000000ffdfa460> (a java.io.InputStreamReader)
        at java.io.BufferedReader.readLine(java.base@11.0.2/BufferedReader.java:392)
        at com.intellij.rt.execution.application.AppMainV2$1.run(AppMainV2.java:55)

"Service Thread" #21 daemon prio=9 os_prio=0 cpu=0.00ms elapsed=3626.59s tid=0x000001d7a3e22000 nid=0x8da0 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"VM Thread" os_prio=2 cpu=0.00ms elapsed=3626.64s tid=0x000001d7a31f5800 nid=0x4248 runnable

"GC Thread#0" os_prio=2 cpu=0.00ms elapsed=3626.65s tid=0x000001d787bae800 nid=0x21e0 runnable

"G1 Main Marker" os_prio=2 cpu=0.00ms elapsed=3626.65s tid=0x000001d787bb7000 nid=0xbaa4 runnable

"G1 Conc#0" os_prio=2 cpu=0.00ms elapsed=3626.65s tid=0x000001d787bb8800 nid=0x2254 runnable

"G1 Refine#0" os_prio=2 cpu=0.00ms elapsed=3626.65s tid=0x000001d787c52000 nid=0xc304 runnable

"G1 Young RemSet Sampling" os_prio=2 cpu=0.00ms elapsed=3626.65s tid=0x000001d787c54000 nid=0x42e4 runnable
"VM Periodic Task Thread" os_prio=2 cpu=0.00ms elapsed=3626.59s tid=0x000001d7a3e23800 nid=0x7d34 waiting on condition

JNI global refs: 24, weak refs: 0
作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap