How to get percentage of CPU usage of OS from java
java, jmx
Solution
In Java 7 you can get it like so:
public static double getProcessCpuLoad() throws Exception {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName name = ObjectName.getInstance("java.lang:type=OperatingSystem");
AttributeList list = mbs.getAttributes(name, new String[]{ "ProcessCpuLoad" });
if (list.isEmpty()) return Double.NaN;
Attribute att = (Attribute)list.get(0);
Double value = (Double)att.getValue();
// usually takes a couple of seconds before we get real values
if (value == -1.0) return Double.NaN;
// returns a percentage value with 1 decimal point precision
return ((int)(value * 1000) / 10.0);
}
Problem
I want to calculate percentage of CPU usage of OS from java code. - There are several ways to find it by `unix` command [e.g. using `mpstat`, `/proc/stat` etc...] and use it from `Runtime.getRuntime().exec` But I don't want to use the system calls. I tried `ManagementFactory.getOperatingSystemMXBean()` ``` OperatingSystemMXBean osBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); System.out.println(osBean.getSystemLoadAverage()); ``` But it gives the cpu load but not the cpu usage. Is there anyway to find the usage percentage?