测量JVM的CPU使用情况:java代码

nad*_*adh 11 java performance jmx cross-platform cpu-usage

有没有办法测量JVM的CPU使用率(一旦启动java应用程序)跨平台(windows + unix + mac)?我使用过Jconsole,但我需要的是一个执行此操作的java代码,而不是一个可以监视CPU利用率的工具.我试过了

ManagementFactory.getOperatingSystemMXBean().getSystemLoadAverage()
Run Code Online (Sandbox Code Playgroud)

使用JMX,但它没有帮助,因为我需要的是JVM的特定CPU使用率(比如当我启动服务器时),而不是系统负载平均值.

Tho*_*ung 8

您应该查看Thread MBean 中的ThreadMXBean.getCurrentCPUTime()方法.

线程CPU时间

Java虚拟机实现可以支持测量当前线程,任何线程或无线程的CPU时间.

还有JTOP示例应用程序是JDK jdk\demo\management\JTop\src\JTop.java此处的一部分.看一下:

/**
 * Get the thread list with CPU consumption and the ThreadInfo for each thread
 * sorted by the CPU time.
 */
private List<Map.Entry<Long, ThreadInfo>> getThreadList()
Run Code Online (Sandbox Code Playgroud)


Muh*_*riq 0

使用纯 Java 不可能以编程方式查询 CPU 使用情况。根本就没有 API 可以实现这一点。建议的替代方案可以用来Runtime.exec()确定 JVM 的进程 ID (PID),调用外部的特定于平台的命令(如 ps),并解析其输出以获取感兴趣的 PID。

请参阅此链接