我正在尝试使用Java来获取当前运行的Java虚拟机使用的CPU百分比。我的研究指出我使用com.sun.management.OperatingSystemMXBean
类。以下是在线示例,我写了以下内容:
import java.lang.management.ManagementFactory;
import com.sun.management.OperatingSystemMXBean;
public class TestClass {
public static void main (String[] args) {
OperatingSystemMXBean bean = (com.sun.management.OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
System.out.println(bean.getProcessCpuLoad());
System.out.println(bean.getSystemCpuLoad());
}
}
在两台计算机上测试后,我无法停止为两次调用获得-1.0
的结果。我尝试通过各种方法使用64位和32位版本的Java 7和6来运行此代码。尽管如此,我得到的是-1.0
的打印,according to the Javadocs,
All values betweens 0.0 and 1.0 are possible depending of the activities going on in the system. If the system recent cpu usage is not available, the method returns a negative value.
我不知道这里还能做什么。获得CPU负载至关重要,我想避免使用像Sigar这样的其他库。有人对此问题有任何建议或有任何见解吗?
答案 0 :(得分:30)
回答我自己的问题,以防它可以帮到某人。
我所做的事情在技术上是正确的,但是我没有给OperatingSystemMXBean
足够的时间来收集CPU使用信息。 JVM必须实际运行几秒才能收集CPU使用信息,然后刷新解决方案依赖于实现。
运行具有以下更改的代码将在我的机器上~2秒后开始生成使用信息:
public static void main(String[] args) {
OperatingSystemMXBean bean = (com.sun.management.OperatingSystemMXBean) ManagementFactory
.getOperatingSystemMXBean();
while (true) {
System.out.println(bean.getProcessCpuLoad());
System.out.println(bean.getSystemCpuLoad());
}
}
希望这可以帮助某人