用rt包的获取cpu usage,可跨平台

来源:互联网 发布:百度云签到源码 编辑:程序博客网 时间:2024/05/18 00:20
import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.util.concurrent.TimeUnit;


public class JmxGet3 {


private static Result result0 = new Result();
private static Result result1 = new Result();


private static RuntimeMXBean rmBean;


private static com.sun.management.OperatingSystemMXBean sunOSMBean;


private static class Result {
long upTime = -1L;
long processCpuTime = -1L;
// long timeStamp;
// int nCPUs;
// String summary;
}


public void get0() {
result0.upTime = rmBean.getUptime();
result0.processCpuTime = sunOSMBean.getProcessCpuTime();
System.out.println("0!" + result0.upTime);
System.out.println("0!" + result0.processCpuTime);
}


public void get1() {
result1.upTime = rmBean.getUptime();
result1.processCpuTime = sunOSMBean.getProcessCpuTime();
System.out.println("1!" + result1.upTime);
System.out.println("1!" + result1.processCpuTime);
}


public double jisuanCPUInfo() {
try {
rmBean = ManagementFactory.getRuntimeMXBean();


sunOSMBean = ManagementFactory.newPlatformMXBeanProxy(
ManagementFactory.getPlatformMBeanServer(),
ManagementFactory.OPERATING_SYSTEM_MXBEAN_NAME,
com.sun.management.OperatingSystemMXBean.class);


long start0 =System.currentTimeMillis();
long start1 =sunOSMBean.getProcessCpuTime();
System.out.println("s0!" + start0);
System.out.println("s1!" + start1);

//for(long i=0;i<1000000000;i++);
TimeUnit.SECONDS.sleep(1);

long end0=System.currentTimeMillis();
long end1=sunOSMBean.getProcessCpuTime();
System.out.println("e0!" + end0);
System.out.println("e1!" + end1);

return (double)((end1-start1)/10000F/(end0-start0));





//return (double) ((result1.processCpuTime - result0.processCpuTime) / 10000F / (result1.upTime - result0.upTime));
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return 0;
}
}
原创粉丝点击