java怎样获取CPU占用率和硬盘占用率?有什么思路可以获取?
          望高手指点!

解决方案 »

  1.   

        /** *//**  
         * 获得CPU使用率.  
         * @return 返回cpu使用率  
         */  
        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;   
            }   
        }
      

  2.   

    Bytes.javaclass 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 +=(char)b[i];
            }
            return tgt;
        }
    }MonitorInfoBean.javapublic class MonitorInfoBean {
        
        /** 线程总数. */
        private int totalThread;
        
        /** cpu使用率. */
        private double cpuRatio;    public int getTotalThread() {
            return totalThread;
        }    public void setTotalThread(int totalThread) {
            this.totalThread = totalThread;
        }    public double getCpuRatio() {
            return cpuRatio;
        }    public void setCpuRatio(double cpuRatio) {
            this.cpuRatio = cpuRatio;
        }
    }CPU.javaimport java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.LineNumberReader;
    import java.util.StringTokenizer;public class CPU {
    private static final int CPUTIME = 30; private static final int PERCENT = 100; private static final int FAULTLENGTH = 10; private static String linuxVersion = null; public double getCpuRatio() {
    // 操作系统
    String osName = System.getProperty("os.name");
    double cpuRatio = 0;
    if (osName.toLowerCase().startsWith("windows")) {
    cpuRatio = this.getCpuRatioForWindows(); } else {
    cpuRatio = this.getCpuRateForLinux();
    }
    return cpuRatio;
    } /**
     * 获得当前的监控对象.
     * 
     * @return 返回构造好的监控对象
     */
    public MonitorInfoBean getMonitorInfoBean() throws Exception { // 操作系统
    String osName = System.getProperty("os.name"); // 获得线程总数
    ThreadGroup parentThread;
    for (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.getCpuRateForLinux();
    } // 构造返回对象
    MonitorInfoBean infoBean = new MonitorInfoBean();
    infoBean.setTotalThread(totalThread);
    infoBean.setCpuRatio(cpuRatio);
    return infoBean;
    } private static double getCpuRateForLinux() {
    InputStream is = null;
    InputStreamReader isr = null;
    BufferedReader brStat = null;
    StringTokenizer tokenStat = null;
    try {
    System.out.println("Get usage 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.4")) {
    brStat.readLine();
    brStat.readLine();
    brStat.readLine();
    brStat.readLine(); tokenStat = new 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.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;
    } else {
    brStat.readLine();
    brStat.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 usage = new Float(cpuUsage.substring(0, cpuUsage
    .indexOf("%"))); return (1 - usage.floatValue() / 100);
    } } catch (IOException ioe) {
    System.out.println(ioe.getMessage());
    freeResource(is, isr, brStat);
    return 1;
    } finally {
    freeResource(is, isr, brStat);
    } } private static void freeResource(InputStream is, InputStreamReader isr,
    BufferedReader br) {
    try {
    if (is != null)
    is.close();
    if (isr != null)
    isr.close();
    if (br != null)
    br.close();
    } catch (IOException ioe) {
    System.out.println(ioe.getMessage());
    }
    } /**
     * 获得CPU使用率.
     * 
     * @return 返回cpu使用率
     */
    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
     */
    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) {
    return null;
    }
    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) {
    continue;
    }
    String caption = Bytes.substring(line, capidx, cmdidx - 1)
    .trim();
    String cmd = Bytes.substring(line, cmdidx, kmtidx - 1).trim();
    if (cmd.indexOf("wmic.exe") >= 0) {
    continue;
    }
    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();
    continue;
    } kneltime += Long.valueOf(
    Bytes.substring(line, kmtidx, rocidx - 1).trim())
    .longValue();
    usertime += Long.valueOf(
    Bytes.substring(line, umtidx, wocidx - 1).trim())
    .longValue();
    }
    retn[0] = idletime;
    retn[1] = kneltime + usertime;
    return retn;
    } catch (Exception ex) {
    ex.printStackTrace();
    } finally {
    try {
    proc.getInputStream().close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    return null;
    } public static void main(String[] args) throws Exception {
    CPU c = new CPU();
    System.out.println("cpu占有率1=" + c.getCpuRatio());
    System.out.println("cpu占有率2=" + c.getCpuRatioForWindows());
    }
    }
      

  3.   

    sigar
    开源包 
    http://www.hyperic.com/products/sigar.html
      

  4.   

    有一个java做的windows任务管理器 ,有CPU占有和内存占用,下载地址没有了  我手上有,要的话找me
      

  5.   

    首先要问下你的是什么系统,不同系统方式是不一样的。windows如上,或者使用网络API包,如winpcap之类的。linux系统,你可以通过shell脚本,然后java调用获取执行结果,总之方法多多
      

  6.   

    是获取windows系统下的cpu占用率,和硬盘占用率
      

  7.   

    可以上传到csdn上吗?,
    大家共享!
      

  8.   

    楼主先要清楚,你用的操作系统是windows还是linux?
      

  9.   


    import java.io.BufferedReader;
    import java.io.InputStreamReader;public class Diskspace {
    public Diskspace() { } public static long getFreeDiskSpace(String dirName) {
    try {
    String os = System.getProperty("os.name");
    String command;
    if (os.equals("Windows NT") || os.equals("Windows 2000")
    || os.equals("Windows XP")) {
    command = "cmd.exe /c dir " + dirName;
    } else {
    command = "command.com /c dir " + dirName;
    }
    Runtime runtime = Runtime.getRuntime();
    Process process = null;
    process = runtime.exec(command);
    if (process == null) { return -1;
    }
    BufferedReader in = new BufferedReader(new InputStreamReader(
    process.getInputStream()));
    String line;
    String freeSpace = null;
    while ((line = in.readLine()) != null) {
    freeSpace = line;
    }
    if (freeSpace == null) {
    return -1;
    }
    process.destroy();
    freeSpace = freeSpace.trim();
    freeSpace = freeSpace.replaceAll("\\.", "");
    freeSpace = freeSpace.replaceAll(",", "");
    String[] items = freeSpace.split(" ");
    int index = 1;
    while (index < items.length) {
    try {
    long bytes = Long.parseLong(items[index++]);
    return bytes;
    } catch (NumberFormatException nfe) {
    }
    }
    return -1; } catch (Exception ex) {
    return -1; } } public static void main(String[] args) {
    long l = 0;
    if (args.length == 0) {
    char[] c = { 'C', 'D', 'E', 'F' };
    for (int i = 0; i < c.length; i++) {
    String dirName = c[i] + ":\\"; System.out.println(dirName + " " + getFreeDiskSpace(dirName));
    l += getFreeDiskSpace(dirName);
    }
    } else {
    for (int i = 0; i < args.length; i++) {
    System.out.println(args[i] + " " + getFreeDiskSpace(args[i]));
    }
    } }
    }在网上搜了一个计算硬盘占用率的代码!
    改了一下
    但有点不对,希望高手改一改!
    在此感谢!
      

  10.   


    /* Total number of processors or cores available to the JVM */
    System.out.println("Available processors (cores): "
    + Runtime.getRuntime().availableProcessors());
    /* Total amount of free memory available to the JVM */
    System.out.println("Free memory (bytes): "
    + Runtime.getRuntime().freeMemory());
    /* This will return Long.MAX_VALUE if there is no preset limit */
    long maxMemory = Runtime.getRuntime().maxMemory();
    /* Maximum amount of memory the JVM will attempt to use */
    System.out.println("Maximum memory (bytes): "
    + (maxMemory == Long.MAX_VALUE ? "no limit" : maxMemory));
    /* Total memory currently in use by the JVM */
    System.out.println("Total memory (bytes): "
    + Runtime.getRuntime().totalMemory());
    /* Get a list of all filesystem roots on this system */
    File[] roots = File.listRoots();
    /* For each filesystem root, print some info */ for (File root : roots) {
    // System.out.println("File system root: " +
    // root.getAbsolutePath()); System.out.println("Total space (bytes): " + root.getTotalSpace());
    System.out.println("Free space (bytes): " + root.getFreeSpace());
    System.out
    .println("Usable space (bytes): " + root.getUsableSpace());
    }
      

  11.   

    有什么好的方式获取资源管理器,内存大小,cpu大小?
      

  12.   

    飘过了。。 。做过linux的,但windows不太清楚。
      

  13.   

    6楼那个读CPU的内容总是抛java.lang.NumberFormatException: For input string: ""异常啊,高手帮解答呀