我使用 jvisualvm
来监控正在运行的java程序。当我深入研究线程cpu使用的细节时,我得到以下图片。 CPU使用率包括文件部分:Running,Sleeping,Wait,Park和Monitor。
我没有找到关于列的官方定义,所以我想知道这些列在java代码中的真正含义。
Running
:执行时使用的时间。Sleeping
:Thread.sleep(long)?Wait
:?Park
:LockSupport.park?Monitor
:?
答案 0 :(得分:3)
我做了一个简单的测试,发现这些列可以映射到java代码操作:
Thread.sleep(..)
Object.wait(..)
LockSupport.park
。synchronized
方法/对象所以,wait / park / monitor都意味着该帖子是blocked
,但是由于不同的原因而被阻止。
如果线程正在等待套接字,则可以在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)
答案 1 :(得分:0)
Thread.sleep(…)
synchronized
块/函数上被调用)