我正在使用 jvisualvm
来监控正在运行的 java 程序。当我深入了解线程 cpu 使用的详细信息时,我得到了下图。 CPU 使用率由文件部分组成:Running、Sleeping、Wait、Park 和 Monitor。
我没有找到关于列的任何官方定义,所以我想知道这些列在 java 代码中的真正含义。
Running
:执行时间。sleep
:Thread.sleep(long) ?等等
:?Park
:LockSupport.park ?监控
: ?
最佳答案
我做了一个简单的测试,发现这些列可以映射到java代码操作:
- hibernate :
Thread.sleep(..)
- 等待:
Object.wait(..)
- Park:当您使用 jdk5+ 中引入的新并发对象时,可能会使用
LockSupport.park
。 - Monitor:当调用
synchronized
方法/对象时
所以,wait/park/monitor 都表示线程被阻塞
,但阻塞的原因不同。
如果一个线程正在等待一个套接字,时间可能会被计算在Running
上。
在这张图片中,Thread-pool-Bill 大部分时间都在Running
,但事实是它在套接字上等待了很长时间:
"Thread-pool-Bill" - Thread t@42
java.lang.Thread.State: RUNNABLE
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
- locked <79f0aad8> (a java.net.SocksSocketImpl)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
关于java - jvisualvm 线程 cpu 时间使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27399678/