I'm trying to use Java to get the percentage of CPU used by the currently running Java Virtual Machine. My research has pointed me to using the com.sun.management.OperatingSystemMXBean
class. Following examples online, I've written the following:
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());
}
}
After testing this on two machines, I can't stop getting a result of -1.0
for both calls. I have tried running this code using both 64- and 32-bit versions of Java 7 and 6 through various methods. Still, all I get is a print out of -1.0
which, 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.
I don't know what else to do here. Getting the CPU load is critical, and I'd like to avoid using another library like Sigar. Anybody have any recommendations or have any insights into this problem?