java - jvisualvm 线程 cpu 时间使用

标签 java performance jvisualvm

我正在使用 jvisualvm 来监控正在运行的 java 程序。当我深入了解线程 cpu 使用的详细信息时,我得到了下图。 CPU 使用率由文件部分组成:Running、Sleeping、Wait、Park 和 Monitor。

我没有找到关于列的任何官方定义,所以我想知道这些列在 java 代码中的真正含义。

  • Running:执行时间。
  • sleep :Thread.sleep(long) ?
  • 等等:?
  • Park:LockSupport.park ?
  • 监控: ?

Thread CPU time usage

最佳答案

我做了一个简单的测试,发现这些列可以映射到java代码操作:

  • hibernate :Thread.sleep(..)
  • 等待:Object.wait(..)
  • Park:当您使用 jdk5+ 中引入的新并发对象时,可能会使用 LockSupport.park
  • Monitor:当调用synchronized方法/对象时

所以,wait/park/monitor 都表示线程被阻塞,但阻塞的原因不同。


如果一个线程正在等待一个套接字,时间可能会被计算在Running上。

enter image description here

在这张图片中,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/

相关文章:

java - 从java发送邮件

.net - 使用堆栈和隐藏窗体预加载 Winforms

java - 如何在本地计算机上启动 jstatd?

java - jvisualvm - 如何查看内存消耗的 Activity 对象

java - 如何找到与象限无关的点与x轴的角度?

java - AspectJ - 使用aspectJ 获取生成lambda 函数的父线程的线程id

java - IOException 没有提供足够的信息

performance - Electron IPC 模块的更快替代方案

Mysql连接查询优化

java - Unix 中的 jvisualvm