本文共 1674 字,大约阅读时间需要 5 分钟。
jstack是java虚拟机自带的一种堆栈跟踪工具。
jstack用于生成虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。
线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。
C:\Users\Administrator>jstack 55162015-12-21 16:10:53Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.79-b02 mixed mode):"DestroyJavaVM" prio=6 tid=0x000000000027d800 nid=0x1bb0 waiting on condition [0x0000000000000000] java.lang.Thread.State: RUNNABLE"Thread-1" prio=6 tid=0x000000000cb13800 nid=0x19ac waiting for monitor entry [0x000000000d67f000] java.lang.Thread.State: BLOCKED (on object monitor) at thread.DeadLockDemo$2.run(DeadLockDemo.java:35) - waiting to lock <0x00000007d5a9be88> (a java.lang.String) - locked <0x00000007d5a9beb8> (a java.lang.String) at java.lang.Thread.run(Unknown Source)"Thread-0" prio=6 tid=0x000000000cb0e800 nid=0x6bc waiting for monitor entry [0x000000000d48f000] java.lang.Thread.State: BLOCKED (on object monitor) at thread.DeadLockDemo$1.run(DeadLockDemo.java:21) - waiting to lock <0x00000007d5a9beb8> (a java.lang.String) - locked <0x00000007d5a9be88> (a java.lang.String) at java.lang.Thread.run(Unknown Source)这里运行了一段,导致程序中的两个线程都在等待对方释放锁,造成程序死锁。
从这段代码中可以明确的看出是 DeadLockDemo.class 中的第35行,和21行出现了阻塞,然后就是要优化这个函数了。
PS : 在实际运行中,往往一次 dump的信息,还不足以确认问题。建议产生三次 dump信息,如果每次 dump都指向同一个问题,我们才确定问题的典型性。
推荐文章:
推荐文章:
转载地址:http://nztix.baihongyu.com/