首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

jstack打印信息有关问题

2012-10-05 
jstack打印信息问题我使用jstack打印了信息,信息的内容好像是线程出现了死锁,大家能帮我看下这个文件,到底

jstack打印信息问题
我使用jstack打印了信息,信息的内容好像是线程出现了死锁,大家能帮我看下这个文件,到底是哪出了问题 ? ?
我看不懂这个文件。
===================================================================================================
Full thread dump Java HotSpot(TM) 64-Bit Server VM (20.8-b03 mixed mode):

"catalina-exec-120" daemon prio=10 tid=0x000000005b293800 nid=0x7171 waiting on condition [0x0000000043b65000]
  java.lang.Thread.State: WAITING (parking)
  at sun.misc.Unsafe.park(Native Method)
  - parking to wait for <0x00000000c01e82a0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
  at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
  at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
  at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
  at java.lang.Thread.run(Thread.java:662)

"catalina-exec-119" daemon prio=10 tid=0x000000005b292000 nid=0x70ad waiting on condition [0x0000000043a64000]
  java.lang.Thread.State: WAITING (parking)
  at sun.misc.Unsafe.park(Native Method)
  - parking to wait for <0x00000000c01e82a0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
  at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
  at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
  at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
  at java.lang.Thread.run(Thread.java:662)

"catalina-exec-118" daemon prio=10 tid=0x000000005b24a800 nid=0x6ff7 waiting on condition [0x0000000043963000]
  java.lang.Thread.State: WAITING (parking)
  at sun.misc.Unsafe.park(Native Method)
  - parking to wait for <0x00000000c01e82a0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
  at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
  at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
  at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
  at java.lang.Thread.run(Thread.java:662)

"catalina-exec-117" daemon prio=10 tid=0x000000005b248800 nid=0x6fb2 waiting on condition [0x0000000043862000]
  java.lang.Thread.State: WAITING (parking)
  at sun.misc.Unsafe.park(Native Method)
  - parking to wait for <0x00000000c01e82a0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
  at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
  at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
  at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)


  at java.lang.Thread.run(Thread.java:662)

"catalina-exec-116" daemon prio=10 tid=0x000000005af11000 nid=0x6f3d waiting on condition [0x0000000043761000]
  java.lang.Thread.State: WAITING (parking)
  at sun.misc.Unsafe.park(Native Method)
  - parking to wait for <0x00000000c01e82a0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
  at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
  at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
  at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
  at java.lang.Thread.run(Thread.java:662)



[解决办法]
你这个信息并不能看出就一定是死锁。只不过是说很多现线程都在等待而已。


加个参数 L 再执行,类似:
jstack -l PID

然后看看最后面有无提示死锁。



另外,就算没有死锁,也不代表程序状态就一定正常。
比如:程序也许在等待网络输入,虽然没有死锁,但如果网络永远没有输入,程序也就永远等待了。

热点排行