visualVM
VisualVM是JDK自带的一款全能型性能监控和故障分析工具,包括对CPU使用、JVM堆内存消耗、线程、类加载的实时监控,内存dump文件分析,垃圾回收运行情况的可视化分析等,对故障排查和性能调优很有帮助。在windows中安装JDK后,VisualVM位于%JAVA_HOME%/bin/下,直接执行jvisualvm.exe即可,也可以配置远程监控JVM,VisualVM连接远程服务器有两种方式:JMX和jstatd,两种方式都不能完美支持所有功能,例如JMX不支持VisualGC,jstatd不支持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] - locked <0x00000000c22a0108> (a java.lang.ref.ReferenceQueue.Lock) |
驻留
"http-bio-8080-exec-2" daemon prio=6 tid=0x000000000d7b8000 nid=0x9264 waiting on condition [0x000000000ee4e000] "pool-9-thread-1" prio=6 tid=0x000000000d7b2000 nid=0xd5fc waiting on condition [0x000000001187e000] |
监视
"Thread-1" prio=6 tid=0x000000000a8a1800 nid=0xfdb4 waiting for monitor entry [0x000000000b4de000] |
系列内容:
Java多线程.线程状态_闲猫的博客-CSDN博客_java线程的状态
Java多线程.Volatile,transient,Monitor,goto_闲猫的博客-CSDN博客_java monitor
Java多线程.三种实现方式_闲猫的博客-CSDN博客_java多线程实现的代码
Java多线程.ReentrantLock_闲猫的博客-CSDN博客
Java多线程.Synchronized_闲猫的博客-CSDN博客
Java多线程.LockSupport_闲猫的博客-CSDN博客