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