Reputation: 151
Hi in my system there will be a master node and n number of slave nodes. The master node will forward the incoming request to one of its slave nodes. I want to find the CPU usage of all its slave node, So that i can forward the request to the appropriate node. I have found similar question like this in that they answered to use getCpuUsage() to find. But when i use it am getting an error like cannot find symbol: getCpuUsage(). Can any one please suggest me how can i find the cpu usage percentage (of the slave node with their i.p address). Thanks in advance.
Upvotes: 0
Views: 4440
Reputation: 1520
I used this snipped of code to compute cpu load with java 1.5 extracted from jconsole:
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;
}
}
Upvotes: 1