一郎科技|Jvm - jstack工具( 四 )


然后 , 我们使用jstack来看一下线程堆栈信息:
Found one Java-level deadlock:============================="Thread-1":waiting to lock monitor 0x00007f0134003ae8 (object 0x00000007d6aa2c98, a java.lang.Object),which is held by "Thread-0""Thread-0":waiting to lock monitor 0x00007f0134006168 (object 0x00000007d6aa2ca8, a java.lang.Object),which is held by "Thread-1"Java stack information for the threads listed above:==================================================="Thread-1":at javaCommand.DeadLockclass.run(JStackDemo.java:40)- waiting to lock <0x00000007d6aa2c98> (a java.lang.Object)- locked <0x00000007d6aa2ca8> (a java.lang.Object)at java.lang.Thread.run(Thread.java:745)"Thread-0":at javaCommand.DeadLockclass.run(JStackDemo.java:27)- waiting to lock <0x00000007d6aa2ca8> (a java.lang.Object)- locked <0x00000007d6aa2c98> (a java.lang.Object)at java.lang.Thread.run(Thread.java:745)Found 1 deadlock.哈哈 , 堆栈写的很明显 , 它告诉我们 Found one Java-level deadlock , 然后指出造成死锁的两个线程的内容 。 然后 , 又通过 Java stack information for the threads listed above来显示更详细的死锁的信息 。他说
Thread-1在想要执行第40行的时候 , 当前锁住了资源<0x00000007d6aa2ca8>,但是他在等待资源<0x00000007d6aa2c98> Thread-0在想要执行第27行的时候 , 当前锁住了资源<0x00000007d6aa2c98>,但是他在等待资源<0x00000007d6aa2ca8> 由于这两个线程都持有资源 , 并且都需要对方的资源 , 所以造成了死锁 。原因我们找到了 , 就可以具体问题具体分析 , 解决这个死锁了 。
其他虚拟机执行Full GC时,会阻塞所有的用户线程 。 因此,即时获取到同步锁的线程也有可能被阻塞 。在查看线程Dump时,首先查看内存使用情况 。
----------------------------------------------------
【一郎科技|Jvm - jstack工具】转载自: