嗨,在我的系统中将有一个主节点和 n 个从节点。主节点将传入请求转发到其从节点之一。我想找到其所有从节点的CPU使用率,以便我可以将请求转发到适当的节点。我发现了类似的问题,他们回答使用 getCpuUsage() 来查找。但是当我使用它时出现错误,例如找不到符号:getCpuUsage()。任何人都可以建议我如何找到(从属节点及其 IP 地址的)CPU 使用率百分比。提前致谢。
最佳答案
我使用这段代码片段通过从 jconsole 中提取的 java 1.5 来计算 CPU 负载:
public class CPULoad {
private static long prevUpTime, prevProcessCpuTime;
private static RuntimeMXBean rmBean;
private static com.sun.management.OperatingSystemMXBean sunOSMBean;
private static Result result;
private static class Result {
long upTime = -1L;
long processCpuTime = -1L;
float cpuUsage = 0;
int nCPUs;
}
static{
try {
rmBean = ManagementFactory.getRuntimeMXBean();
//reperisco l'MBean relativo al sunOS
sunOSMBean = ManagementFactory.newPlatformMXBeanProxy(
ManagementFactory.getPlatformMBeanServer(),
ManagementFactory.OPERATING_SYSTEM_MXBEAN_NAME,
com.sun.management.OperatingSystemMXBean.class
);
result = new Result();
result.nCPUs = sunOSMBean.getAvailableProcessors();
result.upTime = rmBean.getUptime();
result.processCpuTime = sunOSMBean.getProcessCpuTime();
}catch(Exception e){
System.err.println(CPULoad.class.getSimpleName()+" exception: "+e.getMessage());
}
}
public CPULoad(){ }
public float getCPULoad(){
result.upTime = rmBean.getUptime();
result.processCpuTime = sunOSMBean.getProcessCpuTime();
if(result.upTime > 0L && result.processCpuTime >= 0L)
updateCPUInfo();
return result.cpuUsage;
}
public void updateCPUInfo() {
if (prevUpTime > 0L && result.upTime > prevUpTime) {
// elapsedCpu is in ns and elapsedTime is in ms.
long elapsedCpu = result.processCpuTime - prevProcessCpuTime;
long elapsedTime = result.upTime - prevUpTime;
// cpuUsage could go higher than 100% because elapsedTime
// and elapsedCpu are not fetched simultaneously. Limit to
// 99% to avoid Plotter showing a scale from 0% to 200%.
result.cpuUsage =
Math.round(
Math.min(100F,
elapsedCpu / (elapsedTime * 10000F * result.nCPUs)
)
);
}
prevUpTime = result.upTime;
prevProcessCpuTime = result.processCpuTime;
}
}
关于java - 如何使用 java 程序或 JMX 获取远程计算机的系统总 CPU 使用百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9213207/