我正在尝试使用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());
}
}
Run Code Online (Sandbox Code Playgroud)
在两台机器上测试后,我无法停止获得-1.0两个调用的结果.我尝试通过各种方法使用64位和32位版本的Java 7和6来运行此代码.不过,我得到的是打印出的-1.0该,根据的Javadoc,
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这样的其他库.有人对此问题有任何建议或有任何见解吗?
Kon*_*Kon 33
只是回答我自己的问题,以防它可以帮助某人.
我在做什么在技术上是正确的,但是我没有给它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());
}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助某人