1、java程序实现获取计算机cpu利用率和内存使用信息的代码利用java程序实现获取计算机cpu利用率和内存使用信息。创建一个Bean用来存贮要得到的信public class MonitorInfoBean /* 可使用内存. */private long totalMemory;/* 剩余内存. */private long freeMemory;/* 最大可使用内存. */private long maxMemory;/* 操作系统. */private String osName;/* 总的物理内存. */private long totalMemorySize;/* 剩余的物理内存.
2、*/private long freePhysicalMemorySize;/* 已使用的物理内存. */private long usedMemory;/* 线程总数. */private int totalThread;/* cpu使用率. */private double cpuRatio;public long getFreeMemory( return freeMemory;public void setFreeMemory(long freeMemory this.freeMemory = freeMemory;public long getFreePhysicalMemorySi
3、ze( return freePhysicalMemorySize;public void setFreePhysicalMemorySize(long freePhysicalMemorySize this.freePhysicalMemorySize = freePhysicalMemorySize;public long getMaxMemory( return maxMemory;public void setMaxMemory(long maxMemory this.maxMemory = maxMemory;public String getOsName( return osNam
4、e;public void setOsName(String osName this.osName = osName;public long getTotalMemory( return totalMemory;public void setTotalMemory(long totalMemory this.totalMemory = totalMemory;public long getTotalMemorySize( return totalMemorySize;public void setTotalMemorySize(long totalMemorySize this.totalMe
5、morySize = totalMemorySize;public int getTotalThread( return totalThread;public void setTotalThread(int totalThread this.totalThread = totalThread;public long getUsedMemory( return usedMemory;public void setUsedMemory(long usedMemory this.usedMemory = usedMemory;public double getCpuRatio( return cpu
6、Ratio;public void setCpuRatio(double cpuRatio this.cpuRatio = cpuRatio;之后,建立bean的接口public interface IMonitorService public MonitorInfoBean getMonitorInfoBean( throws Exception;然后,就是最关键的,得到cpu的利用率,已用内存,可用内存,最大内存等信息。import java.io.InputStreamReader;import java.io.LineNumberReader;import sun.management
7、.ManagementFactory;import com.sun.management.OperatingSystemMXBean;import java.io.*;import java.util.StringTokenizer;/* 获取系统信息的业务逻辑实现类.* author GuoHuang*/public class MonitorServiceImpl implements IMonitorService private static final int CPUTIME = 30;private static final int PERCENT = 100;private st
8、atic final int FAULTLENGTH = 10;private static final File versionFile = new File(/proc/version;private static String linuxVersion = null;/* 获得当前的监控对象.* return 返回构造好的监控对象* throws Exception* author GuoHuang*/public MonitorInfoBean getMonitorInfoBean( throws Exception int kb = 1024;/ 可使用内存long totalMem
9、ory = Runtime.getRuntime(.totalMemory( / kb;/ 剩余内存long freeMemory = Runtime.getRuntime(.freeMemory( / kb;/ 最大可使用内存long maxMemory = Runtime.getRuntime(.maxMemory( / kb;OperatingSystemMXBean osmxb = (OperatingSystemMXBean ManagementFactory.getOperatingSystemMXBean(;/ 操作系统String osName = System.getProp
10、erty(os.name;/ 总的物理内存long totalMemorySize = osmxb.getTotalPhysicalMemorySize( / kb;/ 剩余的物理内存long freePhysicalMemorySize = osmxb.getFreePhysicalMemorySize( / kb; / 已使用的物理内存long usedMemory = (osmxb.getTotalPhysicalMemorySize( - osmxb.getFreePhysicalMemorySize(/ kb;/ 获得线程总数ThreadGroup parentThread;for
11、(parentThread = Thread.currentThread(.getThreadGroup(; parentThread .getParent( != null; parentThread = parentThread.getParent(;int totalThread = parentThread.activeCount(;double cpuRatio = 0;if (osName.toLowerCase(.startsWith(windows cpuRatio = this.getCpuRatioForWindows(;else cpuRatio = this.getCp
12、uRateForLinux(;/ 构造返回对象MonitorInfoBean infoBean = new MonitorInfoBean(;infoBean.setFreeMemory(freeMemory;infoBean.setFreePhysicalMemorySize(freePhysicalMemorySize;infoBean.setMaxMemory(maxMemory;infoBean.setOsName(osName;infoBean.setTotalMemory(totalMemory;infoBean.setTotalMemorySize(totalMemorySize
13、;infoBean.setTotalThread(totalThread;infoBean.setUsedMemory(usedMemory;infoBean.setCpuRatio(cpuRatio;return infoBean;private static double getCpuRateForLinux(InputStream is = null;InputStreamReader isr = null;BufferedReader brStat = null;StringTokenizer tokenStat = null;trySystem.out.println(Get usa
14、ge rate of CUP , linux version: +linuxVersion;Process process = Runtime.getRuntime(.exec(top -b -n 1;is = process.getInputStream(;isr = new InputStreamReader(is;brStat = new BufferedReader(isr;if(linuxVersion.equals(2.4brStat.readLine(;brStat.readLine(;brStat.readLine(;brStat.readLine(;tokenStat = n
15、ew StringTokenizer(brStat.readLine(;tokenStat.nextToken(;tokenStat.nextToken(;String user = tokenStat.nextToken(;tokenStat.nextToken(;String system = tokenStat.nextToken(;tokenStat.nextToken(;String nice = tokenStat.nextToken(;System.out.println(user+ , +system+ , +nice;user = user.substring(0,user.
16、indexOf(%;system = system.substring(0,system.indexOf(%;nice = nice.substring(0,nice.indexOf(%;float userUsage = new Float(user.floatValue(;float systemUsage = new Float(system.floatValue(;float niceUsage = new Float(nice.floatValue(;return (userUsage+systemUsage+niceUsage/100;elsebrStat.readLine(;br
17、Stat.readLine(;tokenStat = new StringTokenizer(brStat.readLine(;tokenStat.nextToken(;tokenStat.nextToken(;tokenStat.nextToken(;tokenStat.nextToken(;tokenStat.nextToken(;tokenStat.nextToken(;tokenStat.nextToken(;String cpuUsage = tokenStat.nextToken(;System.out.println(CPU idle : +cpuUsage;Float usag
18、e = new Float(cpuUsage.substring(0,cpuUsage.indexOf(%;return (1-usage.floatValue(/100; catch(IOException ioeSystem.out.println(ioe.getMessage(;freeResource(is, isr, brStat;return 1; finallyfreeResource(is, isr, brStat;private static void freeResource(InputStream is, InputStreamReader isr, BufferedRe
19、ader brtryif(is!=nullis.close(;if(isr!=nullisr.close(;if(br!=nullbr.close(;catch(IOException ioeSystem.out.println(ioe.getMessage(;/* 获得CPU使用率.* return 返回cpu使用率* author GuoHuang*/private double getCpuRatioForWindows( try String procCmd = System.getenv(windir+ system32wbemwmic.exeprocess get Caption,
20、CommandLine,+KernelModeTime,ReadOperationCount,ThreadCount,UserModeTime,WriteOperationC ount;/ 取进程信息long c0 = readCpu(Runtime.getRuntime(.exec(procCmd;Thread.sleep(CPUTIME;long c1 = readCpu(Runtime.getRuntime(.exec(procCmd;if (c0 != null & c1 != null long idletime = c10 - c00;long busytime = c11 - c
21、01;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 GuoHuang*/private long readCpu(final Process proc long retn = new long2;try proc.getOutputStream(.close(;Input
22、StreamReader ir = new InputStreamReader(proc.getInputStream(; LineNumberReader input = new LineNumberReader(ir;String line = input.readLine(;if (line = null | line.length( FAULTLENGTH return null;int capidx = line.indexOf(Caption;int cmdidx = line.indexOf(CommandLine;int rocidx = line.indexOf(ReadOp
23、erationCount;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( = 0 continue;/ log.info(line=+line;if (caption.equal
24、s(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(;continue;kneltime += Long.valueOf(Bytes.substring(line, kmtidx, rocidx - 1.trim(.longValu
25、e(;usertime += Long.valueOf(Bytes.substring(line, umtidx, wocidx - 1.trim(.longValue(;retn0 = idletime;retn1 = kneltime + usertime;return retn; catch (Exception ex ex.printStackTrace(; finally try proc.getInputStream(.close(; catch (Exception e e.printStackTrace(;return null;/* 测试方法.* param args* th
26、rows Exception* author GuoHuang*/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.getTotalMemo
27、ry(;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.
28、out.println(已使用的物理内存= + monitorInfo.getUsedMemory( + kb;System.out.println(线程总数= + monitorInfo.getTotalThread( + kb;其中,Bytes类用来处理字符串public class Bytes public static String substring(String src, int start_idx, int end_idx byte b = src.getBytes(;String tgt = ;for(int i=start_idx; i=end_idx; i+tgt +=(charbi;return tgt;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1