0
点赞
收藏
分享

微信扫一扫

Java多线程.线程检测

visualVM

VisualVMJDK自带的一款全能型性能监控和故障分析工具,包括对CPU使用、JVM堆内存消耗、线程、类加载的实时监控,内存dump文件分析,垃圾回收运行情况的可视化分析等,对故障排查和性能调优很有帮助。在windows中安装JDK后,VisualVM位于%JAVA_HOME%/bin/下,直接执行jvisualvm.exe即可,也可以配置远程监控JVMVisualVM连接远程服务器有两种方式:JMXjstatd,两种方式都不能完美支持所有功能,例如JMX不支持VisualGCjstatd不支持CPU监控,实际使用可同时配置上并按需选用。主要运行界面如图:

“VisualVM线程监控线程状态”与“Java线程状态”对应关系总结:

可以看出,VisualVM的线程状态将“WAITING”和“TIMED_WAITING”两个状态根据行程状态的原因做了细化(其实java的thread stack dump上已经细化了)

如造成“TIMED_WAITING”状态的原因可能是 :

Thread.sleep()  --  休眠

Object.wait(timeout)  --  等待

LockSupport.parkUntil(deadline)  --  驻留

dump thread stack

linux命令

运行

"http-bio-8080-Acceptor-0" daemon prio=6 tid=0x000000000d7b4800 nid=0xa264 runnable [0x000000001197e000]

      java.lang.Thread.State: RUNNABLE

            at java.net.DualStackPlainSocketImpl.accept0(Native Method)

            at java.net.DualStackPlainSocketImpl.socketAccept(DualStackPlainSocketImpl.java:131)

            at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:398)

休眠

"Druid-ConnectionPool-Destory-293325558" daemon prio=6 tid=0x000000000d7ad000 nid=0x9c94 waiting on condition [0x000000000bf0f000]

      java.lang.Thread.State: TIMED_WAITING (sleeping)

           at java.lang.Thread.sleep(Native Method)

            at com.alibaba.druid.pool.DruidDataSource$DestroyConnectionThread.run(DruidDataSource.java:1685)

等待

"Finalizer" daemon prio=8 tid=0x0000000009349000 nid=0xa470 in Object.wait() [0x000000000a82f000]
      java.lang.Thread.State: 
WAITING (on object monitor)
            at java.lang.Object.wait(Native Method)
            - 
waiting on <0x00000000c22a0108> (a java.lang.ref.ReferenceQueue$Lock)
            at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135)

      - locked <0x00000000c22a0108> (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)

驻留

"http-bio-8080-exec-2" daemon prio=6 tid=0x000000000d7b8000 nid=0x9264 waiting on condition [0x000000000ee4e000]
      java.lang.Thread.State:
 WAITING (parking)
            at sun.misc.Unsafe.park(Native Method)
           
- parking to wait for  <0x00000000c5629bc8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject)
            at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)

"pool-9-thread-1" prio=6 tid=0x000000000d7b2000 nid=0xd5fc waiting on condition [0x000000001187e000]
       java.lang.Thread.State: TIMED_WAITING (parking)
             at sun.misc.Unsafe.park(Native Method)
             - parking to wait for  <0x00000000c563b9e0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject)
             at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226)

监视

"Thread-1" prio=6 tid=0x000000000a8a1800 nid=0xfdb4 waiting for monitor entry [0x000000000b4de000]
      java.lang.Thread.State: BLOCKED (on object monitor)
            at com.jy.modules.test.Test2$T.run(Test2.java:58)
           - waiting to lock <0x00000000eab757e0> (a java.lang.Object)

举报

相关推荐

0 条评论