4

我有一个 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% 运行时发出警报,并确定线程列表中可能的罪魁祸首。

4

1 回答 1

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);
}
于 2014-06-11T22:32:58.003 回答