java线程状态——jstack的应用,java线程jstack
分享于 点击 26649 次 点评:110
java线程状态——jstack的应用,java线程jstack
jstack是java提供的查询jvm栈信息的小工具。
在之前的文章中已经广泛的使用它,文章参考如下:
java 线程状态
java 线程状态——情况续说
java线程状态——java线程状态图
java线程状态——死锁
当我们要使用jstack时,不可避免的重要入参就是pid(jvm的启动进程)
我们可以通过jps完成这个工作,jps有四个操作选项,qvml
其实这四个参数是很好记忆的,我的记忆方法是qv m l(你懂的)
虽然很污,但是一下就能记住了。
其中q是比较特殊的参数,使用q除了pid外什么的不输出,因此不要和vml一起使用。
jps的示例如下:
jps -ml
输出如下:
22732 org.apache.catalina.startup.Bootstrap start
15433 sun.tools.jps.Jps -ml
25318 org.apache.catalina.startup.Bootstrap start
可以看出我本地启动了三个java进程,两个tomat和一个jps,jps的进程明显是多余的,我们可以使用linux的管道禁止这行数据的输出,命令如下:
jps -ml | grep -v jps
输出如下
22732 org.apache.catalina.startup.Bootstrap start
25318 org.apache.catalina.startup.Bootstrap start
15510 c
由输出可以看出来过滤掉了jps的信息
jstack输出栈信息,并去除daemon线程信息,命令如下:
jstack 15510 | grep -v daemon > c.dat
c.dat内容如下:
2017-02-14 10:10:48
Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.80-b11 mixed mode):
java.lang.Thread.State: RUNNABLE
java.lang.Thread.State: RUNNABLE
java.lang.Thread.State: RUNNABLE
java.lang.Thread.State: RUNNABLE
java.lang.Thread.State: RUNNABLE
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000007d7004858> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135)
- locked <0x00000007d7004858> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000007d7004470> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:503)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
- locked <0x00000007d7004470> (a java.lang.ref.Reference$Lock)
"main" prio=10 tid=0x00007f4038008800 nid=0x30e6 waiting on condition [0x00007f403ccc7000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000007d704a740> (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.ArrayBlockingQueue.put(ArrayBlockingQueue.java:324)
at c.main(c.java:12)
"VM Thread" prio=10 tid=0x00007f4038071000 nid=0x30ef runnable
"GC task thread#0 (ParallelGC)" prio=10 tid=0x00007f403801e000 nid=0x30e7 runnable
"GC task thread#1 (ParallelGC)" prio=10 tid=0x00007f4038020000 nid=0x30e8 runnable
"GC task thread#2 (ParallelGC)" prio=10 tid=0x00007f4038022000 nid=0x30e9 runnable
相关文章
- 暂无相关文章
用户点评