如何获取JVM中所有线程的CPU百分比?

时间:2014-06-11 22:06:43

标签: java linux sigar

我有一个java监控应用程序,用于监控linux上的CPU(等等)。

我正在使用Sigar来获取进程的CPU使用率。 http://cpansearch.perl.org/src/DOUGM/hyperic-sigar-1.6.3-src/docs/javadoc/org/hyperic/sigar/Sigar.html#getProcCpu%28long%29

但是,这只是一个过程级别。 htop显示我的应用程序中的线程和每个使用的CPU百分比。

是否可以用Sigar做到这一点?

如果我在多核盒子上,是否可以获得每个核心的CPU利用率?

我想在CPU长时间以100%运行时发出警报,并确定线程列表中可能存在的罪魁祸首。

1 个答案:

答案 0 :(得分:0)

JMX可用于从Java运行时获取此信息,但似乎CPU负载不是标准Java API的一部分,您需要转换为com.sun.management.OperatingSystemMXBean

OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean();
double loadAverage = osBean.getSystemLoadAverage();
System.out.println("Load average: " + loadAverage);

if (osBean instanceof com.sun.management.OperatingSystemMXBean)
{
    com.sun.management.OperatingSystemMXBean sunOsBean = (com.sun.management.OperatingSystemMXBean)osBean;
    double cpuLoad = sunOsBean.getSystemCpuLoad();
    System.out.println("CPU load: " + cpuLoad);
}