layout: post title: “JDK-命令行工具介绍2” subtitle: “ "了解jstack的用法"” date: 2016-07-31 18:58:00 author: “Dunno” header-img: “img/post-bg-2015.jpg” tags: - JVM —
线上经常出现各式各样的问题,通过jdk自带的命令行工具,能帮助我们更加快速的定位到故障。
jdk 为我们提供了很多命令行工具,其中经常使用到的有监控工具(jps,jstat,statd)和故障排查工具(jinfo,jhat,jmap,jsadebugd,jstack)
这次我们介绍非常非常常用的命令:jstack
http://docs.oracle.com/javase/7/docs/technotes/tools/ https://dzone.com/articles/how-analyze-java-thread-dumps https://gist.github.com/rednaxelafx/843622
jstack 根据指定的端口或者远程debug服务打印出线程栈跟踪信息。
部分输出:
Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.76-b04 mixed mode):
"Thread-11-EventThread" daemon prio=5 tid=0x00007f8e9d8e0000 nid=0x32327 waiting on condition [0x0000700013bca000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000007eef76740> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at org.apache.zookeeper.ClientCnxn$EventThread.run(ClientCnxn.java:494)
Locked ownable synchronizers:
- None
"Thread-11-SendThread(10.4.241.128:2181)" daemon prio=5 tid=0x00007f8e9d857000 nid=0x2a33f runnable [0x0000700013ac7000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.KQueueArrayWrapper.kevent0(Native Method)
at sun.nio.ch.KQueueArrayWrapper.poll(KQueueArrayWrapper.java:200)
at sun.nio.ch.KQueueSelectorImpl.doSelect(KQueueSelectorImpl.java:103)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:87)
- locked <0x00000007eef75488> (a sun.nio.ch.Util$2)
- locked <0x00000007eef75478> (a java.util.Collections$UnmodifiableSet)
- locked <0x00000007eef75358> (a sun.nio.ch.KQueueSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:98)
at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:349)
at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1081)
Locked ownable synchronizers:
- None