Обновление: в Java 7 вы можете сделать это так:
public static double getProcessCpuLoad() throws MalformedObjectNameException, ReflectionException, InstanceNotFoundException {
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();
if (value == -1.0) return Double.NaN;
return ((int)(value * 1000) / 10.0); // returns a percentage value with 1 decimal point precision
}
----- оригинальный ответ ниже -----
В Java 7 вы можете использовать скрытые методы com.sun.management.OperatingSystemMXBean
:
getProcessCpuLoad() // returns the CPU usage of the JVM
getSystemCpuLoad() // returns the CPU usage of the whole system
Оба значения возвращаются в виде двойного числа от 0,0 до 1,0, поэтому просто умножьте на 100, чтобы получить процент.
com.sun.management.OperatingSystemMXBean osBean = ManagementFactory.getPlatformMXBean(OperatingSystemMXBean.class);
System.out.println(osBean.getProcessCpuLoad() * 100);
System.out.println(osBean.getSystemCpuLoad() * 100);
Поскольку это скрытые, недокументированные методы, которые существуют в пакете com.sun.management.OperatingSystemMXBean
, а не в java.lang.management.OperatingSystemMXBean
, существует риск, что они не будут доступны в некоторых JVM или в будущих обновлениях, поэтому вам следует решить, будете ли готовы пойти на такой риск или нет.
Подробнее см. https://www.java.net/community-item/hidden-java-7-features-%E2%80%93-system-and-process-cpu-load-monitoring.