如何获得系统&x27;s使用java程序或JMX的远程计算机的CPU总使用率百分比
Hi在我的系统中将有一个主节点和n个从节点。主节点将传入的请求转发给它的一个从节点。我想找到所有从节点的CPU使用情况,以便将请求转发到适当的节点。我发现了类似的问题,他们回答使用getCpuUsage()来查找。但当我使用它时,会出现一个错误,比如找不到符号:getCpuUsage()。有谁能告诉我如何找到cpu使用率百分比(从节点的i.p地址)。提前感谢。我使用从jconsole中提取的java 1.5来计算cpu负载:如何获得系统&x27;s使用java程序或JMX的远程计算机的CPU总使用率百分比,java,monitoring,jmx,cpu-usage,Java,Monitoring,Jmx,Cpu Usage,Hi在我的系统中将有一个主节点和n个从节点。主节点将传入的请求转发给它的一个从节点。我想找到所有从节点的CPU使用情况,以便将请求转发到适当的节点。我发现了类似的问题,他们回答使用getCpuUsage()来查找。但当我使用它时,会出现一个错误,比如找不到符号:getCpuUsage()。有谁能告诉我如何找到cpu使用率百分比(从节点的i.p地址)。提前感谢。我使用从jconsole中提取的java 1.5来计算cpu负载: public class CPULoad { priva
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;
}
}
这并不真正计算cpu负载。它只计算cpu忙于当前Java进程的时间,而不计算任何其他进程的时间。非常感谢您的代码。但这似乎可以找到当前机器上的cpu负载。但是如何找到将连接到网络中的从节点的cpu负载。是否可以通过远程访问找到从属节点的cpu负载。。?