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)


 系列内容:

Java多线程.线程状态_闲猫的博客-CSDN博客_java线程的状态

Java多线程.Volatile,transient,Monitor,goto_闲猫的博客-CSDN博客_java monitor

Java多线程.Unsafe_闲猫的博客-CSDN博客

Java多线程.三种实现方式_闲猫的博客-CSDN博客_java多线程实现的代码

Java多线程.ReentrantLock_闲猫的博客-CSDN博客

Java多线程.Synchronized_闲猫的博客-CSDN博客

Java多线程.LockSupport_闲猫的博客-CSDN博客

Java多线程.线程检测_闲猫的博客-CSDN博客_java 多线程测试

Java多线程.CAS_闲猫的博客-CSDN博客_java多线程cas

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值