如何获得远程计算机的CPU设备利用率率

拒绝访问 |
| 百度云加速
请打开cookies.
此网站 () 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(38b6d203b35243b3-ua98).
重新安装浏览器,或使用别的浏览器java 获取系统信息及CPU的使用率原文:/blog/211492最近做个项目,就是要取得cpu占有率等等的系统信息,一开始以为要用动态链接库了,但后来发现可以像下面这样做,不去调用jni,这样省去了很多看新技术的时间o(&_&)o...在Java中,可以获得总的物理内存、剩余的物理内存、已使用的物理内存等信息,下面例子可以取得这些信息,并且获得在Windows下的内存使用率。&&&& 首先编写一个MonitorInfoBean类,用来装载监控的一些信息,包括物理内存、剩余的物理内存、已使用的物理内存、内存使用率等字段,该类的代码如下:Java代码 复制代码&&& package com.amgkaka.& &&&&& &&&& /** *//** &&&&& * 监视信息的JavaBean类. &&&&& * @author& amg &&&&& * @version 1.0& &&&&& * Creation date:
- 上午10:37:00 &&&&& */ &&&& public class MonitorInfoBean {& &&&&&&&& /** *//** 可使用内存. */ &&&&&&&& private long totalM& &&&&&&&&&& &&&&&&&& /** *//** 剩余内存. */ &&&&&&&& private long freeM& &&&&&&&&&& &&&&&&&& /** *//** 最大可使用内存. */ &&&&&&&& private long maxM& &&&&&&&&&& &&&&&&&& /** *//** 操作系统. */ &&&&&&&& private String osN& &&&&&&&&&& &&&&&&&& /** *//** 总的物理内存. */ &&&&&&&& private long totalMemoryS& &&&&&&&&&& &&&&&&&& /** *//** 剩余的物理内存. */ &&&&&&&& private long freePhysicalMemoryS& &&&&&&&&&& &&&&&&&& /** *//** 已使用的物理内存. */ &&&&&&&& private long usedM& &&&&&&&&&& &&&&&&&& /** *//** 线程总数. */ &&&&&&&& private int totalT& &&&&&&&&&& &&&&&&&& /** *//** cpu使用率. */ &&&&&&&& private double cpuR& &&&&& &&&&&&&& public long getFreeMemory() {& &&&&&&&&&&&& return freeM& &&&&&&&& }& &&&&& &&&&&&&& public void setFreeMemory(long freeMemory) {& &&&&&&&&&&&& this.freeMemory = freeM& &&&&&&&& }& &&&&& &&&&&&&& public long getFreePhysicalMemorySize() {& &&&&&&&&&&&& return freePhysicalMemoryS& &&&&&&&& }& &&&&& &&&&&&&& public void setFreePhysicalMemorySize(long freePhysicalMemorySize) {& &&&&&&&&&&&& this.freePhysicalMemorySize = freePhysicalMemoryS& &&&&&&&& }& &&&&& &&&&&&&& public long getMaxMemory() {& &&&&&&&&&&&& return maxM& &&&&&&&& }& &&&&& &&&&&&&& public void setMaxMemory(long maxMemory) {& &&&&&&&&&&&& this.maxMemory = maxM& &&&&&&&& }& &&&&& &&&&&&&& public String getOsName() {& &&&&&&&&&&&& return osN& &&&&&&&& }& &&&&& &&&&&&&& public void setOsName(String osName) {& &&&&&&&&&&&& this.osName = osN& &&&&&&&& }& &&&&& &&&&&&&& public long getTotalMemory() {& &&&&&&&&&&&& return totalM& &&&&&&&& }& &&&&& &&&&&&&& public void setTotalMemory(long totalMemory) {& &&&&&&&&&&&& this.totalMemory = totalM& &&&&&&&& }& &&&&& &&&&&&&& public long getTotalMemorySize() {& &&&&&&&&&&&& return totalMemoryS& &&&&&&&& }& &&&&& &&&&&&&& public void setTotalMemorySize(long totalMemorySize) {& &&&&&&&&&&&& this.totalMemorySize = totalMemoryS& &&&&&&&& }& &&&&& &&&&&&&& public int getTotalThread() {& &&&&&&&&&&&& return totalT& &&&&&&&& }& &&&&& &&&&&&&& public void setTotalThread(int totalThread) {& &&&&&&&&&&&& this.totalThread = totalT& &&&&&&&& }& &&&&& &&&&&&&& public long getUsedMemory() {& &&&&&&&&&&&& return usedM& &&&&&&&& }& &&&&& &&&&&&&& public void setUsedMemory(long usedMemory) {& &&&&&&&&&&&& this.usedMemory = usedM& &&&&&&&& }& &&&&& &&&&&&&& public double getCpuRatio() {& &&&&&&&&&&&& return cpuR& &&&&&&&& }& &&&&& &&&&&&&& public void setCpuRatio(double cpuRatio) {& &&&&&&&&&&&& this.cpuRatio = cpuR& &&&&&&&& }& &&&& } &[java] view plain copy&&& package com.amgkaka. &&&&& &&&& /** *//** &&&& * 监视信息的JavaBean类. &&&& * @author& amg &&&& * @version 1.0 &&&&& * Creation date:
- 上午10:37:00 &&&& */ &&&& public class MonitorInfoBean { &&&&&&&& /** *//** 可使用内存. */ &&&&&&&& private long totalM &&&&&&&&& &&&&&&&& /** *//** 剩余内存. */ &&&&&&&& private long freeM &&&&&&&&& &&&&&&&& /** *//** 最大可使用内存. */ &&&&&&&& private long maxM &&&&&&&&& &&&&&&&& /** *//** 操作系统. */ &&&&&&&& private String osN &&&&&&&&& &&&&&&&& /** *//** 总的物理内存. */ &&&&&&&& private long totalMemoryS &&&&&&&&& &&&&&&&& /** *//** 剩余的物理内存. */ &&&&&&&& private long freePhysicalMemoryS &&&&&&&&& &&&&&&&& /** *//** 已使用的物理内存. */ &&&&&&&& private long usedM &&&&&&&&& &&&&&&&& /** *//** 线程总数. */ &&&&&&&& private int totalT &&&&&&&&& &&&&&&&& /** *//** cpu使用率. */ &&&&&&&& private double cpuR &&&&& &&&&&&&& public long getFreeMemory() { &&&&&&&&&&&& return freeM &&&&&&&& } &&&&& &&&&&&&& public void setFreeMemory(long freeMemory) { &&&&&&&&&&&& this.freeMemory = freeM &&&&&&&& } &&&&& &&&&&&&& public long getFreePhysicalMemorySize() { &&&&&&&&&&&& return freePhysicalMemoryS &&&&&&&& } &&&&& &&&&&&&& public void setFreePhysicalMemorySize(long freePhysicalMemorySize) { &&&&&&&&&&&& this.freePhysicalMemorySize = freePhysicalMemoryS &&&&&&&& } &&&&& &&&&&&&& public long getMaxMemory() { &&&&&&&&&&&& return maxM &&&&&&&& } &&&&& &&&&&&&& public void setMaxMemory(long maxMemory) { &&&&&&&&&&&& this.maxMemory = maxM &&&&&&&& } &&&&& &&&&&&&& public String getOsName() { &&&&&&&&&&&& return osN &&&&&&&& } &&&&& &&&&&&&& public void setOsName(String osName) { &&&&&&&&&&&& this.osName = osN &&&&&&&& } &&&&& &&&&&&&& public long getTotalMemory() { &&&&&&&&&&&& return totalM &&&&&&&& } &&&&& &&&&&&&& public void setTotalMemory(long totalMemory) { &&&&&&&&&&&& this.totalMemory = totalM &&&&&&&& } &&&&& &&&&&&&& public long getTotalMemorySize() { &&&&&&&&&&&& return totalMemoryS &&&&&&&& } &&&&& &&&&&&&& public void setTotalMemorySize(long totalMemorySize) { &&&&&&&&&&&& this.totalMemorySize = totalMemoryS &&&&&&&& } &&&&& &&&&&&&& public int getTotalThread() { &&&&&&&&&&&& return totalT &&&&&&&& } &&&&& &&&&&&&& public void setTotalThread(int totalThread) { &&&&&&&&&&&& this.totalThread = totalT &&&&&&&& } &&&&& &&&&&&&& public long getUsedMemory() { &&&&&&&&&&&& return usedM &&&&&&&& } &&&&& &&&&&&&& public void setUsedMemory(long usedMemory) { &&&&&&&&&&&& this.usedMemory = usedM &&&&&&&& } &&&&& &&&&&&&& public double getCpuRatio() { &&&&&&&&&&&& return cpuR &&&&&&&& } &&&&& &&&&&&&& public void setCpuRatio(double cpuRatio) { &&&&&&&&&&&& this.cpuRatio = cpuR &&&&&&&& } &&&& } &&接着编写一个获得当前的监控信息的接口,该类的代码如下所示:Java代码 复制代码&&& package com.amgkaka.& &&&&& &&&& /** *//** &&&&& * 获取系统信息的业务逻辑类接口. &&&&& * @author amg * @version 1.0& &&&&& * Creation date:
- 上午10:06:06 &&&&& */ &&&& public interface IMonitorService {& &&&&&&&& /** *//** &&&&&&&&& * 获得当前的监控对象. &&&&&&&&& * @return 返回构造好的监控对象 &&&&&&&&& * @throws Exception &&&&&&&&& * @author amgkaka &&&&&&&&& * Creation date:
- 上午10:45:08 &&&&&&&&& */ &&&&&&&& public MonitorInfoBean getMonitorInfoBean() throws E& &&&&& &&&& } &[java] view plain copy&&& package com.amgkaka. &&&&& &&&& /** *//** &&&& * 获取系统信息的业务逻辑类接口. &&&& * @author amg * @version 1.0 &&&&& * Creation date:
- 上午10:06:06 &&&& */ &&&& public interface IMonitorService { &&&&&&&& /** *//** &&&&&&&& * 获得当前的监控对象. &&&&&&&& * @return 返回构造好的监控对象 &&&&&&&& * @throws Exception &&&&&&&& * @author amgkaka &&&&&&&& * Creation date:
- 上午10:45:08 &&&&&&&& */ &&&&&&&& public MonitorInfoBean getMonitorInfoBean() throws E &&&&& &&&& } && 该类的实现类MonitorServiceImpl如下所示:Java代码 复制代码&&& package com.amgkaka.& &&&&& &&&& import java.io.InputStreamR& &&&& import java.io.LineNumberR& &&&&& &&&& import sun.management.ManagementF& &&&&& &&&& import com.sun.management.OperatingSystemMXB& &&&&& &&&& /** *//** &&&&& * 获取系统信息的业务逻辑实现类. &&&&& * @author amg * @version 1.0 Creation date:
- 上午10:06:06 &&&&& */ &&&& public class MonitorServiceImpl implements IMonitorService {& &&&&&&&& //可以设置长些,防止读到运行此次系统检查时的cpu占用率,就不准了& &&&&&&&& private static final int CPUTIME = 5000;& &&&&& &&&&&&&& private static final int PERCENT = 100;& &&&&& &&&&&&&& private static final int FAULTLENGTH = 10;& &&&&& &&&&&&&& /** *//** &&&&&&&&& * 获得当前的监控对象. &&&&&&&&& * @return 返回构造好的监控对象 &&&&&&&&& * @throws Exception &&&&&&&&& * @author amg&&&& * Creation date:
- 上午10:45:08 &&&&&&&&& */ &&&&&&&& public MonitorInfoBean getMonitorInfoBean() throws Exception {& &&&&&&&&&&&& int kb = 1024;& &&&&&&&&&&&&&& &&&&&&&&&&&& // 可使用内存& &&&&&&&&&&&& long totalMemory = Runtime.getRuntime().totalMemory() /& &&&&&&&&&&&& // 剩余内存& &&&&&&&&&&&& long freeMemory = Runtime.getRuntime().freeMemory() /& &&&&&&&&&&&& // 最大可使用内存& &&&&&&&&&&&& long maxMemory = Runtime.getRuntime().maxMemory() /& &&&&& &&&&&&&&&&&& OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory& &&&&&&&&&&&&&&&&&&&& .getOperatingSystemMXBean();& &&&&& &&&&&&&&&&&& // 操作系统& &&&&&&&&&&&& String osName = System.getProperty("os.name");& &&&&&&&&&&&& // 总的物理内存& &&&&&&&&&&&& long totalMemorySize = osmxb.getTotalPhysicalMemorySize() /& &&&&&&&&&&&& // 剩余的物理内存& &&&&&&&&&&&& long freePhysicalMemorySize = osmxb.getFreePhysicalMemorySize() /& &&&&&&&&&&&& // 已使用的物理内存& &&&&&&&&&&&& long usedMemory = (osmxb.getTotalPhysicalMemorySize() - osmxb& &&&&&&&&&&&&&&&&&&&& .getFreePhysicalMemorySize())& &&&&&&&&&&&&&&&&&&&& /& &&&&& &&&&&&&&&&&& // 获得线程总数& &&&&&&&&&&&& ThreadGroup parentT& &&&&&&&&&&&& for (parentThread = Thread.currentThread().getThreadGroup(); parentThread& &&&&&&&&&&&&&&&&&&&& .getParent() != parentThread = parentThread.getParent())& &&&&&&&&&&&&&&&& ;& &&&&&&&&&&&& int totalThread = parentThread.activeCount();& &&&&& &&&&&&&&&&&& double cpuRatio = 0;& &&&&&&&&&&&& if (osName.toLowerCase().startsWith("windows")) {& &&&&&&&&&&&&&&&& cpuRatio = this.getCpuRatioForWindows();& &&&&&&&&&&&& }& &&&&&&&&&&&&&& &&&&&&&&&&&& // 构造返回对象& &&&&&&&&&&&& MonitorInfoBean infoBean = new MonitorInfoBean();& &&&&&&&&&&&& 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);& &&&&&&&&&&&& return infoB& &&&&&&&& }& &&&&& &&&&&&&& /** *//** &&&&&&&&& * 获得CPU使用率. &&&&&&&&& * @return 返回cpu使用率 &&&&&&&&& * @author amg&&&& * Creation date:
- 下午06:05:11 &&&&&&&&& */ &&&&&&&& private double getCpuRatioForWindows() {& &&&&&&&&&&&& try {& &&&&&&&&&&&&&&&& String procCmd = System.getenv("windir")& &&&&&&&&&&&&&&&&&&&&&&&& + "//system32//wbem//wmic.exe process get Caption,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) {& &&&&&&&&&&&&&&&&&&&& long idletime = c1[0] - c0[0];& &&&&&&&&&&&&&&&&&&&& long busytime = c1[1] - c0[1];& &&&&&&&&&&&&&&&&&&&& return Double.valueOf(& &&&&&&&&&&&&&&&&&&&&&&&&&&&& PERCENT * (busytime) / (busytime + idletime))& &&&&&&&&&&&&&&&&&&&&&&&&&&&& .doubleValue();& &&&&&&&&&&&&&&&& } else {& &&&&&&&&&&&&&&&&&&&& return 0.0;& &&&&&&&&&&&&&&&& }& &&&&&&&&&&&& } catch (Exception ex) {& &&&&&&&&&&&&&&&& ex.printStackTrace();& &&&&&&&&&&&&&&&& return 0.0;& &&&&&&&&&&&& }& &&&&&&&& }& &&&&& &&&&&&&& /** *//** &&&&&&&&& * 读取CPU信息. &&&&&&&&& * @param proc &&&&&&&&& * @return &&&&&&&&& * @author amg&&&& * Creation date:
- 下午06:10:14 &&&&&&&&& */ &&&&&&&& private long[] readCpu(final Process proc) {& &&&&&&&&&&&& long[] retn = new long[2];& &&&&&&&&&&&& try {& &&&&&&&&&&&&&&&& proc.getOutputStream().close();& &&&&&&&&&&&&&&&& InputStreamReader ir = new InputStreamReader(proc.getInputStream());& &&&&&&&&&&&&&&&& LineNumberReader input = new LineNumberReader(ir);& &&&&&&&&&&&&&&&& String line = input.readLine();& &&&&&&&&&&&&&&&& if (line == null || line.length() & FAULTLENGTH) {& &&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&& }& &&&&&&&&&&&&&&&& int capidx = line.indexOf("Caption");& &&&&&&&&&&&&&&&& int cmdidx = line.indexOf("CommandLine");& &&&&&&&&&&&&&&&& int rocidx = line.indexOf("ReadOperationCount");& &&&&&&&&&&&&&&&& int umtidx = line.indexOf("UserModeTime");& &&&&&&&&&&&&&&&& int kmtidx = line.indexOf("KernelModeTime");& &&&&&&&&&&&&&&&& int wocidx = line.indexOf("WriteOperationCount");& &&&&&&&&&&&&&&&& long idletime = 0;& &&&&&&&&&&&&&&&& long kneltime = 0;& &&&&&&&&&&&&&&&& long usertime = 0;& &&&&&&&&&&&&&&&& while ((line = input.readLine()) != null) {& &&&&&&&&&&&&&&&&&&&& if (line.length() & wocidx) {& &&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&& }& &&&&&&&&&&&&&&&&&&&& // 字段出现顺序:Caption,CommandLine,KernelModeTime,ReadOperationCount,& &&&&&&&&&&&&&&&&&&&& // ThreadCount,UserModeTime,WriteOperation& &&&&&&&&&&&&&&&&&&&& String caption = Bytes.substring(line, capidx, cmdidx - 1)& &&&&&&&&&&&&&&&&&&&&&&&&&&&& .trim();& &&&&&&&&&&&&&&&&&&&& String cmd = Bytes.substring(line, cmdidx, kmtidx - 1).trim();& &&&&&&&&&&&&&&&&&&&& if (cmd.indexOf("wmic.exe") &= 0) {& &&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&& }& &&&&&&&&&&&&&&&&&&&& // ("line="+line);& &&&&&&&&&&&&&&&&&&&& if (caption.equals("System Idle Process")& &&&&&&&&&&&&&&&&&&&&&&&&&&&& || caption.equals("System")) {& &&&&&&&&&&&&&&&&&&&&&&&& idletime += Long.valueOf(& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Bytes.substring(line, kmtidx, rocidx - 1).trim())& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& .longValue();& &&&&&&&&&&&&&&&&&&&&&&&& idletime += Long.valueOf(& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Bytes.substring(line, umtidx, wocidx - 1).trim())& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& .longValue();& &&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&& }& &&&&& &&&&&&&&&&&&&&&&&&&& kneltime += Long.valueOf(& &&&&&&&&&&&&&&&&&&&&&&&&&&&& Bytes.substring(line, kmtidx, rocidx - 1).trim())& &&&&&&&&&&&&&&&&&&&&&&&&&&&& .longValue();& &&&&&&&&&&&&&&&&&&&& usertime += Long.valueOf(& &&&&&&&&&&&&&&&&&&&&&&&&&&&& Bytes.substring(line, umtidx, wocidx - 1).trim())& &&&&&&&&&&&&&&&&&&&&&&&&&&&& .longValue();& &&&&&&&&&&&&&&&& }& &&&&&&&&&&&&&&&& retn[0] =& &&&&&&&&&&&&&&&& retn[1] = kneltime +& &&&&&&&&&&&&&&&&& &&&&&&&&&&&& } catch (Exception ex) {& &&&&&&&&&&&&&&&& ex.printStackTrace();& &&&&&&&&&&&& } finally {& &&&&&&&&&&&&&&&& try {& &&&&&&&&&&&&&&&&&&&& proc.getInputStream().close();& &&&&&&&&&&&&&&&& } catch (Exception e) {& &&&&&&&&&&&&&&&&&&&& e.printStackTrace();& &&&&&&&&&&&&&&&& }& &&&&&&&&&&&& }& &&&&&&&&&&&&& &&&&&&&& }& &&&&&&&&&& &&&&&&&& /** *//** &&&&&&&&& * 测试方法. &&&&&&&&& * @param args &&&&&&&&& * @throws Exception &&&&&&&&& * @author amg&&&& * Creation date:
- 下午04:47:29 &&&&&&&&& */ &&&&&&&& public static void main(String[] args) throws Exception {& &&&&&&&&&&&& IMonitorService service = new MonitorServiceImpl();& &&&&&&&&&&&& MonitorInfoBean monitorInfo = service.getMonitorInfoBean();& &&&&&&&&&&&& System.out.println("cpu占有率=" + monitorInfo.getCpuRatio());& &&&&&&&&&&&&&& &&&&&&&&&&&& System.out.println("可使用内存=" + monitorInfo.getTotalMemory());& &&&&&&&&&&&& System.out.println("剩余内存=" + monitorInfo.getFreeMemory());& &&&&&&&&&&&& System.out.println("最大可使用内存=" + monitorInfo.getMaxMemory());& &&&&&&&&&&&&&& &&&&&&&&&&&& System.out.println("操作系统=" + monitorInfo.getOsName());& &&&&&&&&&&&& System.out.println("总的物理内存=" + monitorInfo.getTotalMemorySize() + "kb");& &&&&&&&&&&&& System.out.println("剩余的物理内存=" + monitorInfo.getFreeMemory() + "kb");& &&&&&&&&&&&& System.out.println("已使用的物理内存=" + monitorInfo.getUsedMemory() + "kb");& &&&&&&&&&&&& System.out.println("线程总数=" + monitorInfo.getTotalThread() + "kb");& &&&&&&&& }& &&&& } &[java] view plain copy&&& package com.amgkaka. &&&&& &&&& import java.io.InputStreamR &&&& import java.io.LineNumberR &&&&& &&&& import sun.management.ManagementF &&&&& &&&& import com.sun.management.OperatingSystemMXB &&&&& &&&& /** *//** &&&& * 获取系统信息的业务逻辑实现类. &&&& * @author amg * @version 1.0 Creation date:
- 上午10:06:06 &&&& */ &&&& public class MonitorServiceImpl implements IMonitorService { &&&&&&&& //可以设置长些,防止读到运行此次系统检查时的cpu占用率,就不准了 &&&&&&&& private static final int CPUTIME = 5000; &&&&& &&&&&&&& private static final int PERCENT = 100; &&&&& &&&&&&&& private static final int FAULTLENGTH = 10; &&&&& &&&&&&&& /** *//** &&&&&&&& * 获得当前的监控对象. &&&&&&&& * @return 返回构造好的监控对象 &&&&&&&& * @throws Exception &&&&&&&& * @author amg&&&& * Creation date:
- 上午10:45:08 &&&&&&&& */ &&&&&&&& public MonitorInfoBean getMonitorInfoBean() throws Exception { &&&&&&&&&&&& int kb = 1024; &&&&&&&&&&&&& &&&&&&&&&&&& // 可使用内存 &&&&&&&&&&&& long totalMemory = Runtime.getRuntime().totalMemory() / &&&&&&&&&&&& // 剩余内存 &&&&&&&&&&&& long freeMemory = Runtime.getRuntime().freeMemory() / &&&&&&&&&&&& // 最大可使用内存 &&&&&&&&&&&& long maxMemory = Runtime.getRuntime().maxMemory() / &&&&& &&&&&&&&&&&& OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory &&&&&&&&&&&&&&&&&&&& .getOperatingSystemMXBean(); &&&&& &&&&&&&&&&&& // 操作系统 &&&&&&&&&&&& String osName = System.getProperty("os.name"); &&&&&&&&&&&& // 总的物理内存 &&&&&&&&&&&& long totalMemorySize = osmxb.getTotalPhysicalMemorySize() / &&&&&&&&&&&& // 剩余的物理内存 &&&&&&&&&&&& long freePhysicalMemorySize = osmxb.getFreePhysicalMemorySize() / &&&&&&&&&&&& // 已使用的物理内存 &&&&&&&&&&&& long usedMemory = (osmxb.getTotalPhysicalMemorySize() - osmxb &&&&&&&&&&&&&&&&&&&& .getFreePhysicalMemorySize()) &&&&&&&&&&&&&&&&&&&& / &&&&& &&&&&&&&&&&& // 获得线程总数 &&&&&&&&&&&& ThreadGroup parentT &&&&&&&&&&&& for (parentThread = Thread.currentThread().getThreadGroup(); parentThread &&&&&&&&&&&&&&&&&&&& .getParent() != parentThread = parentThread.getParent()) &&&&&&&&&&&&&&&& ; &&&&&&&&&&&& int totalThread = parentThread.activeCount(); &&&&& &&&&&&&&&&&& double cpuRatio = 0; &&&&&&&&&&&& if (osName.toLowerCase().startsWith("windows")) { &&&&&&&&&&&&&&&& cpuRatio = this.getCpuRatioForWindows(); &&&&&&&&&&&& } &&&&&&&&&&&&& &&&&&&&&&&&& // 构造返回对象 &&&&&&&&&&&& MonitorInfoBean infoBean = new MonitorInfoBean(); &&&&&&&&&&&& 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); &&&&&&&&&&&& return infoB &&&&&&&& } &&&&& &&&&&&&& /** *//** &&&&&&&& * 获得CPU使用率. &&&&&&&& * @return 返回cpu使用率 &&&&&&&& * @author amg&&&& * Creation date:
- 下午06:05:11 &&&&&&&& */ &&&&&&&& private double getCpuRatioForWindows() { &&&&&&&&&&&& try { &&&&&&&&&&&&&&&& String procCmd = System.getenv("windir") &&&&&&&&&&&&&&&&&&&&&&&& + "//system32//wbem//wmic.exe process get Caption,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) { &&&&&&&&&&&&&&&&&&&& long idletime = c1[0] - c0[0]; &&&&&&&&&&&&&&&&&&&& long busytime = c1[1] - c0[1]; &&&&&&&&&&&&&&&&&&&& return Double.valueOf( &&&&&&&&&&&&&&&&&&&&&&&&&&&& PERCENT * (busytime) / (busytime + idletime)) &&&&&&&&&&&&&&&&&&&&&&&&&&&& .doubleValue(); &&&&&&&&&&&&&&&& } else { &&&&&&&&&&&&&&&&&&&& return 0.0; &&&&&&&&&&&&&&&& } &&&&&&&&&&&& } catch (Exception ex) { &&&&&&&&&&&&&&&& ex.printStackTrace(); &&&&&&&&&&&&&&&& return 0.0; &&&&&&&&&&&& } &&&&&&&& } &&&&& &&&&&&&& /** *//** &&&&&&&& * 读取CPU信息. &&&&&&&& * @param proc &&&&&&&& * @return &&&&&&&& * @author amg&&&& * Creation date:
- 下午06:10:14 &&&&&&&& */ &&&&&&&& private long[] readCpu(final Process proc) { &&&&&&&&&&&& long[] retn = new long[2]; &&&&&&&&&&&& try { &&&&&&&&&&&&&&&& proc.getOutputStream().close(); &&&&&&&&&&&&&&&& InputStreamReader ir = new InputStreamReader(proc.getInputStream()); &&&&&&&&&&&&&&&& LineNumberReader input = new LineNumberReader(ir); &&&&&&&&&&&&&&&& String line = input.readLine(); &&&&&&&&&&&&&&&& if (line == null || line.length() & FAULTLENGTH) { &&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&& } &&&&&&&&&&&&&&&& int capidx = line.indexOf("Caption"); &&&&&&&&&&&&&&&& int cmdidx = line.indexOf("CommandLine"); &&&&&&&&&&&&&&&& int rocidx = line.indexOf("ReadOperationCount"); &&&&&&&&&&&&&&&& int umtidx = line.indexOf("UserModeTime"); &&&&&&&&&&&&&&&& int kmtidx = line.indexOf("KernelModeTime"); &&&&&&&&&&&&&&&& int wocidx = line.indexOf("WriteOperationCount"); &&&&&&&&&&&&&&&& long idletime = 0; &&&&&&&&&&&&&&&& long kneltime = 0; &&&&&&&&&&&&&&&& long usertime = 0; &&&&&&&&&&&&&&&& while ((line = input.readLine()) != null) { &&&&&&&&&&&&&&&&&&&& if (line.length() & wocidx) { &&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&& } &&&&&&&&&&&&&&&&&&&& // 字段出现顺序:Caption,CommandLine,KernelModeTime,ReadOperationCount, &&&&&&&&&&&&&&&&&&&& // ThreadCount,UserModeTime,WriteOperation &&&&&&&&&&&&&&&&&&&& String caption = Bytes.substring(line, capidx, cmdidx - 1) &&&&&&&&&&&&&&&&&&&&&&&&&&&& .trim(); &&&&&&&&&&&&&&&&&&&& String cmd = Bytes.substring(line, cmdidx, kmtidx - 1).trim(); &&&&&&&&&&&&&&&&&&&& if (cmd.indexOf("wmic.exe") &= 0) { &&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&& } &&&&&&&&&&&&&&&&&&&& // ("line="+line); &&&&&&&&&&&&&&&&&&&& if (caption.equals("System Idle Process") &&&&&&&&&&&&&&&&&&&&&&&&&&&& || caption.equals("System")) { &&&&&&&&&&&&&&&&&&&&&&&& idletime += Long.valueOf( &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Bytes.substring(line, kmtidx, rocidx - 1).trim()) &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& .longValue(); &&&&&&&&&&&&&&&&&&&&&&&& idletime += Long.valueOf( &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Bytes.substring(line, umtidx, wocidx - 1).trim()) &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& .longValue(); &&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&& } &&&&& &&&&&&&&&&&&&&&&&&&& kneltime += Long.valueOf( &&&&&&&&&&&&&&&&&&&&&&&&&&&& Bytes.substring(line, kmtidx, rocidx - 1).trim()) &&&&&&&&&&&&&&&&&&&&&&&&&&&& .longValue(); &&&&&&&&&&&&&&&&&&&& usertime += Long.valueOf( &&&&&&&&&&&&&&&&&&&&&&&&&&&& Bytes.substring(line, umtidx, wocidx - 1).trim()) &&&&&&&&&&&&&&&&&&&&&&&&&&&& .longValue(); &&&&&&&&&&&&&&&& } &&&&&&&&&&&&&&&& retn[0] = &&&&&&&&&&&&&&&& retn[1] = kneltime + &&&&&&&&&&&&&&&& &&&&&&&&&&&& } catch (Exception ex) { &&&&&&&&&&&&&&&& ex.printStackTrace(); &&&&&&&&&&&& } finally { &&&&&&&&&&&&&&&& try { &&&&&&&&&&&&&&&&&&&& proc.getInputStream().close(); &&&&&&&&&&&&&&&& } catch (Exception e) { &&&&&&&&&&&&&&&&&&&& e.printStackTrace(); &&&&&&&&&&&&&&&& } &&&&&&&&&&&& } &&&&&&&&&&&& &&&&&&&& } &&&&&&&&& &&&&&&&& /** *//** &&&&&&&& * 测试方法. &&&&&&&& * @param args &&&&&&&& * @throws Exception &&&&&&&& * @author amg&&&& * Creation date:
- 下午04:47:29 &&&&&&&& */ &&&&&&&& public static void main(String[] args) throws Exception { &&&&&&&&&&&& IMonitorService service = new MonitorServiceImpl(); &&&&&&&&&&&& MonitorInfoBean monitorInfo = service.getMonitorInfoBean(); &&&&&&&&&&&& System.out.println("cpu占有率=" + monitorInfo.getCpuRatio()); &&&&&&&&&&&&& &&&&&&&&&&&& System.out.println("可使用内存=" + monitorInfo.getTotalMemory()); &&&&&&&&&&&& System.out.println("剩余内存=" + monitorInfo.getFreeMemory()); &&&&&&&&&&&& System.out.println("最大可使用内存=" + monitorInfo.getMaxMemory()); &&&&&&&&&&&&& &&&&&&&&&&&& System.out.println("操作系统=" + monitorInfo.getOsName()); &&&&&&&&&&&& System.out.println("总的物理内存=" + monitorInfo.getTotalMemorySize() + "kb"); &&&&&&&&&&&& System.out.println("剩余的物理内存=" + monitorInfo.getFreeMemory() + "kb"); &&&&&&&&&&&& System.out.println("已使用的物理内存=" + monitorInfo.getUsedMemory() + "kb"); &&&&&&&&&&&& System.out.println("线程总数=" + monitorInfo.getTotalThread() + "kb"); &&&&&&&& } &&&& } &&该实现类中需要用到一个自己编写byte的工具类,该类的代码如下所示:Java代码 复制代码&&& package com.amgkaka.& &&&&& &&&& /** *//** &&&&& * byte操作类. &&&&& * @author amg * @version 1.0& &&&&& * Creation date:
- 下午04:57:23 &&&&& */ &&&& public class Bytes {& &&&&&&&& /** *//** &&&&&&&&& * 由于String.subString对汉字处理存在问题(把一个汉字视为一个字节),因此在 &&&&&&&&& * 包含汉字的字符串时存在隐患,现调整如下: &&&&&&&&& * @param src 要截取的字符串 &&&&&&&&& * @param start_idx 开始坐标(包括该坐标) &&&&&&&&& * @param end_idx&& 截止坐标(包括该坐标) &&&&&&&&& * @return &&&&&&&&& */ &&&&&&&& public static String substring(String src, int start_idx, int end_idx){& &&&&&&&&&&&& byte[] b = src.getBytes();& &&&&&&&&&&&& String tgt = "";& &&&&&&&&&&&& for(int i=start_ i&=end_ i++){& &&&&&&&&&&&&&&&& tgt +=(char)b[i];& &&&&&&&&&&&& }& &&&&&&&&&&&&& &&&&&&&& }& &&&& } &[java] view plain copy&&& package com.amgkaka. &&&&& &&&& /** *//** &&&& * byte操作类. &&&& * @author amg * @version 1.0 &&&&& * Creation date:
- 下午04:57:23 &&&& */ &&&& public class Bytes { &&&&&&&& /** *//** &&&&&&&& * 由于String.subString对汉字处理存在问题(把一个汉字视为一个字节),因此在 &&&&&&&& * 包含汉字的字符串时存在隐患,现调整如下: &&&&&&&& * @param src 要截取的字符串 &&&&&&&& * @param start_idx 开始坐标(包括该坐标) &&&&&&&& * @param end_idx&& 截止坐标(包括该坐标) &&&&&&&& * @return &&&&&&&& */ &&&&&&&& public static String substring(String src, int start_idx, int end_idx){ &&&&&&&&&&&& byte[] b = src.getBytes(); &&&&&&&&&&&& String tgt = ""; &&&&&&&&&&&& for(int i=start_ i&=end_ i++){ &&&&&&&&&&&&&&&& tgt +=(char)b[i]; &&&&&&&&&&&& } &&&&&&&&&&&& &&&&&&&& } &&&& } &&运行下MonitorBeanImpl类,读者将会看到当前的内存、cpu利用率等信息&wmic很强大,网上有很多wmic的命令,eg:wmic 获取物理内存wmic memlogical get TotalPhysicalMemory&wmic 获取进程信息,很详细wmic process&System.getProperty("os.name"));//得到操作系统名字 System.getProperty("sun.os.patch.level");//得到操作系统版本
阅读(...) 评论()

我要回帖

更多关于 设备利用率 的文章

 

随机推荐