Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get percentage of CPU usage of OS from java

Tags:

java

jmx

I want to calculate percentage of CPU usage of OS from java code.

  1. 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?

like image 745
G.S Avatar asked Aug 28 '13 13:08

G.S


People also ask

How is CPU usage calculated in operating system?

The calculated CPU time that is derived from the reported consumed CPU time divided by the reported available capacity is 50% (45 seconds divided by 90 seconds). The interactive utilization percentage is 17% (15 seconds divided by 90 seconds). The batch utilization percentage is 33% (30 seconds divided by 90 seconds).


1 Answers

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); } 
like image 130
isapir Avatar answered Sep 18 '22 06:09

isapir