当前位置:   article > 正文

java runtime cpu_java如何获取实时cpu使用情况?

java 如何获取准确的cpu使用情况

03cf3512616824b00564db95d7f4dfcd.png

翻过高山走不出你

首先编写一个MonitorInfoBean类,用来装载监控的一些信息,包括物理内存、剩余的物理内存、已使用的物理内存、内存使用率等字段,该类的代码如下:packagecom.amgkaka.performance;/***//***监视信息的JavaBean类.*@authoramg*@version1.0*Creationdate:2008-4-25-上午10:37:00*/publicclassMonitorInfoBean{/***//**可使用内存.*/privatelongtotalMemory;/***//**剩余内存.*/privatelongfreeMemory;/***//**最大可使用内存.*/privatelongmaxMemory;/***//**操作系统.*/privateStringosName;/***//**总的物理内存.*/privatelongtotalMemorySize;/***//**剩余的物理内存.*/privatelongfreePhysicalMemorySize;/***//**已使用的物理内存.*/privatelongusedMemory;/***//**线程总数.*/privateinttotalThread;/***//**cpu使用率.*/privatedoublecpuRatio;publiclonggetFreeMemory(){returnfreeMemory;}publicvoidsetFreeMemory(longfreeMemory){this.freeMemory=freeMemory;}publiclonggetFreePhysicalMemorySize(){returnfreePhysicalMemorySize;}publicvoidsetFreePhysicalMemorySize(longfreePhysicalMemorySize){this.freePhysicalMemorySize=freePhysicalMemorySize;}publiclonggetMaxMemory(){returnmaxMemory;}publicvoidsetMaxMemory(longmaxMemory){this.maxMemory=maxMemory;}publicStringgetOsName(){returnosName;}publicvoidsetOsName(StringosName){this.osName=osName;}publiclonggetTotalMemory(){returntotalMemory;}publicvoidsetTotalMemory(longtotalMemory){this.totalMemory=totalMemory;}publiclonggetTotalMemorySize(){returntotalMemorySize;}publicvoidsetTotalMemorySize(longtotalMemorySize){this.totalMemorySize=totalMemorySize;}publicintgetTotalThread(){returntotalThread;}publicvoidsetTotalThread(inttotalThread){this.totalThread=totalThread;}publiclonggetUsedMemory(){returnusedMemory;}publicvoidsetUsedMemory(longusedMemory){this.usedMemory=usedMemory;}publicdoublegetCpuRatio(){returncpuRatio;}publicvoidsetCpuRatio(doublecpuRatio){this.cpuRatio=cpuRatio;}}packagecom.amgkaka.performance;/***//***监视信息的JavaBean类.*@authoramg*@version1.0*Creationdate:2008-4-25-上午10:37:00*/publicclassMonitorInfoBean{/***//**可使用内存.*/privatelongtotalMemory;/***//**剩余内存.*/privatelongfreeMemory;/***//**最大可使用内存.*/privatelongmaxMemory;/***//**操作系统.*/privateStringosName;/***//**总的物理内存.*/privatelongtotalMemorySize;/***//**剩余的物理内存.*/privatelongfreePhysicalMemorySize;/***//**已使用的物理内存.*/privatelongusedMemory;/***//**线程总数.*/privateinttotalThread;/***//**cpu使用率.*/privatedoublecpuRatio;publiclonggetFreeMemory(){returnfreeMemory;}publicvoidsetFreeMemory(longfreeMemory){this.freeMemory=freeMemory;}publiclonggetFreePhysicalMemorySize(){returnfreePhysicalMemorySize;}publicvoidsetFreePhysicalMemorySize(longfreePhysicalMemorySize){this.freePhysicalMemorySize=freePhysicalMemorySize;}publiclonggetMaxMemory(){returnmaxMemory;}publicvoidsetMaxMemory(longmaxMemory){this.maxMemory=maxMemory;}publicStringgetOsName(){returnosName;}publicvoidsetOsName(StringosName){this.osName=osName;}publiclonggetTotalMemory(){returntotalMemory;}publicvoidsetTotalMemory(longtotalMemory){this.totalMemory=totalMemory;}publiclonggetTotalMemorySize(){returntotalMemorySize;}publicvoidsetTotalMemorySize(longtotalMemorySize){this.totalMemorySize=totalMemorySize;}publicintgetTotalThread(){returntotalThread;}publicvoidsetTotalThread(inttotalThread){this.totalThread=totalThread;}publiclonggetUsedMemory(){returnusedMemory;}publicvoidsetUsedMemory(longusedMemory){this.usedMemory=usedMemory;}publicdoublegetCpuRatio(){returncpuRatio;}publicvoidsetCpuRatio(doublecpuRatio){this.cpuRatio=cpuRatio;}}接着编写一个获得当前的监控信息的接口,该类的代码如下所示:packagecom.amgkaka.performance;/***//***获取系统信息的业务逻辑类接口.*@authoramg*@version1.0*Creationdate:2008-3-11-上午10:06:06*/publicinterfaceIMonitorService{/***//***获得当前的监控对象.*@return返回构造好的监控对象*@throwsException*@authoramgkaka*Creationdate:2008-4-25-上午10:45:08*/publicMonitorInfoBeangetMonitorInfoBean()throwsException;}packagecom.amgkaka.performance;/***//***获取系统信息的业务逻辑类接口.*@authoramg*@version1.0*Creationdate:2008-3-11-上午10:06:06*/publicinterfaceIMonitorService{/***//***获得当前的监控对象.*@return返回构造好的监控对象*@throwsException*@authoramgkaka*Creationdate:2008-4-25-上午10:45:08*/publicMonitorInfoBeangetMonitorInfoBean()throwsException;}该类的实现类MonitorServiceImpl如下所示:packagecom.amgkaka.performance;importjava.io.InputStreamReader;importjava.io.LineNumberReader;importsun.management.ManagementFactory;importcom.sun.management.OperatingSystemMXBean;/***//***获取系统信息的业务逻辑实现类.*@authoramg*@version1.0Creationdate:2008-3-11-上午10:06:06*/publicclassMonitorServiceImplimplementsIMonitorService{//可以设置长些,防止读到运行此次系统检查时的cpu占用率,就不准了privatestaticfinalintCPUTIME=5000;privatestaticfinalintPERCENT=100;privatestaticfinalintFAULTLENGTH=10;/***//***获得当前的监控对象.*@return返回构造好的监控对象*@throwsException*@authoramg*Creationdate:2008-4-25-上午10:45:08*/publicMonitorInfoBeangetMonitorInfoBean()throwsException{intkb=1024;//可使用内存longtotalMemory=Runtime.getRuntime().totalMemory()/kb;//剩余内存longfreeMemory=Runtime.getRuntime().freeMemory()/kb;//最大可使用内存longmaxMemory=Runtime.getRuntime().maxMemory()/kb;OperatingSystemMXBeanosmxb=(OperatingSystemMXBean)ManagementFactory.getOperatingSystemMXBean();//操作系统StringosName=System.getProperty("os.name");//总的物理内存longtotalMemorySize=osmxb.getTotalPhysicalMemorySize()/kb;//剩余的物理内存longfreePhysicalMemorySize=osmxb.getFreePhysicalMemorySize()/kb;//已使用的物理内存longusedMemory=(osmxb.getTotalPhysicalMemorySize()-osmxb.getFreePhysicalMemorySize())/kb;//获得线程总数ThreadGroupparentThread;for(parentThread=Thread.currentThread().getThreadGroup();parentThread.getParent()!=null;parentThread=parentThread.getParent());inttotalThread=parentThread.activeCount();doublecpuRatio=0;if(osName.toLowerCase().startsWith("windows")){cpuRatio=this.getCpuRatioForWindows();}//构造返回对象MonitorInfoBeaninfoBean=newMonitorInfoBean();infoBean.setFreeMemory(freeMemory);infoBean.setFreePhysicalMemorySize(freePhysicalMemorySize);infoBean.setMaxMemory(maxMemory);infoBean.setOsName(osName);infoBean.setTotalMemory(totalMemory);infoBean.setTotalMemorySize(totalMemorySize);infoBean.setTotalThread(totalThread);infoBean.setUsedMemory(usedMemory);infoBean.setCpuRatio(cpuRatio);returninfoBean;}/***//***获得CPU使用率.*@return返回cpu使用率*@authoramg*Creationdate:2008-4-25-下午06:05:11*/privatedoublegetCpuRatioForWindows(){try{StringprocCmd=System.getenv("windir")+"//system32//wbem//wmic.exeprocessgetCaption,CommandLine,"+"KernelModeTime,ReadOperationCount,ThreadCount,UserModeTime,WriteOperationCount";//取进程信息long[]c0=readCpu(Runtime.getRuntime().exec(procCmd));Thread.sleep(CPUTIME);long[]c1=readCpu(Runtime.getRuntime().exec(procCmd));if(c0!=null&&c1!=null){longidletime=c1[0]-c0[0];longbusytime=c1[1]-c0[1];returnDouble.valueOf(PERCENT*(busytime)/(busytime+idletime)).doubleValue();}else{return0.0;}}catch(Exceptionex){ex.printStackTrace();return0.0;}}/***//***读取CPU信息.*@paramproc*@return*@authoramg*Creationdate:2008-4-25-下午06:10:14*/privatelong[]readCpu(finalProcessproc){long[]retn=newlong[2];try{proc.getOutputStream().close();InputStreamReaderir=newInputStreamReader(proc.getInputStream());LineNumberReaderinput=newLineNumberReader(ir);Stringline=input.readLine();if(line==null||line.length()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/58909
推荐阅读
相关标签
  

闽ICP备14008679号