Java 获取 CPU 核的使用百分比
Java get CPU usage percentage of cores
我想获得所有内核的总 CPU 使用率。我需要打印这样的东西:
Cpu 1: 33%
Cpu 2: 12%
Cpu 3: 66%
Cpu 4: 100%
我尝试使用此代码:
OperatingSystemMXBean operatingSystemMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
int availableProcessors = operatingSystemMXBean.getAvailableProcessors();
long prevUpTime = runtimeMXBean.getUptime();
long prevProcessCpuTime = operatingSystemMXBean.getProcessCpuTime();
double cpuUsage;
try
{
Thread.sleep(500);
}
catch (Exception ignored) { }
operatingSystemMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
long upTime = runtimeMXBean.getUptime();
long processCpuTime = operatingSystemMXBean.getProcessCpuTime();
long elapsedCpu = processCpuTime - prevProcessCpuTime;
long elapsedTime = upTime - prevUpTime;
cpuUsage = Math.min(99F, elapsedCpu / (elapsedTime * 10000F * availableProcessors));
System.out.println("Java CPU: " + cpuUsage);
但是这段代码给我的输出是这样的:Java CPU: 27.504911422729492
。
有人可以帮我解决这个问题吗?
JavaSysMon uses OS-specific approach e.g. on Linux it parses /proc/cpuinfo
to enumerate the cores. For the actual CPU core utilisation it parses the /proc/stat
file (see LinuxMonitor).
我想获得所有内核的总 CPU 使用率。我需要打印这样的东西:
Cpu 1: 33%
Cpu 2: 12%
Cpu 3: 66%
Cpu 4: 100%
我尝试使用此代码:
OperatingSystemMXBean operatingSystemMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
int availableProcessors = operatingSystemMXBean.getAvailableProcessors();
long prevUpTime = runtimeMXBean.getUptime();
long prevProcessCpuTime = operatingSystemMXBean.getProcessCpuTime();
double cpuUsage;
try
{
Thread.sleep(500);
}
catch (Exception ignored) { }
operatingSystemMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
long upTime = runtimeMXBean.getUptime();
long processCpuTime = operatingSystemMXBean.getProcessCpuTime();
long elapsedCpu = processCpuTime - prevProcessCpuTime;
long elapsedTime = upTime - prevUpTime;
cpuUsage = Math.min(99F, elapsedCpu / (elapsedTime * 10000F * availableProcessors));
System.out.println("Java CPU: " + cpuUsage);
但是这段代码给我的输出是这样的:Java CPU: 27.504911422729492
。
有人可以帮我解决这个问题吗?
JavaSysMon uses OS-specific approach e.g. on Linux it parses /proc/cpuinfo
to enumerate the cores. For the actual CPU core utilisation it parses the /proc/stat
file (see LinuxMonitor).