欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java线程状态——jstack的应用,java线程jstack

来源: javaer 分享于  点击 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


相关文章

    暂无相关文章
相关栏目:

用户点评