Java獲取Linux系統cpu使用率

ew45 9年前發布 | 6K 次閱讀 Java

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;

import org.apache.commons.io.FileSystemUtils;

public class OSUtils {

/**
 * 功能:可用磁盤
 * */
public static int disk() {
    try {
        long total = FileSystemUtils.freeSpaceKb("/home");
        double disk = (double) total / 1024 / 1024;
        return (int) disk;
    } catch (IOException e) {
        e.printStackTrace();
    }
    return 0;
}

/**
 * 功能:獲取Linux系統cpu使用率
 * */
public static int cpuUsage() {
    try {
        Map<?, ?> map1 = OSUtils.cpuinfo();
        Thread.sleep(5 * 1000);
        Map<?, ?> map2 = OSUtils.cpuinfo();

        long user1 = Long.parseLong(map1.get("user").toString());
        long nice1 = Long.parseLong(map1.get("nice").toString());
        long system1 = Long.parseLong(map1.get("system").toString());
        long idle1 = Long.parseLong(map1.get("idle").toString());

        long user2 = Long.parseLong(map2.get("user").toString());
        long nice2 = Long.parseLong(map2.get("nice").toString());
        long system2 = Long.parseLong(map2.get("system").toString());
        long idle2 = Long.parseLong(map2.get("idle").toString());

        long total1 = user1 + system1 + nice1;
        long total2 = user2 + system2 + nice2;
        float total = total2 - total1;

        long totalIdle1 = user1 + nice1 + system1 + idle1;
        long totalIdle2 = user2 + nice2 + system2 + idle2;
        float totalidle = totalIdle2 - totalIdle1;

        float cpusage = (total / totalidle) * 100;
        return (int) cpusage;
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return 0;
}

/**
 * 功能:CPU使用信息
 * */
public static Map<?, ?> cpuinfo() {
    InputStreamReader inputs = null;
    BufferedReader buffer = null;
    Map<String, Object> map = new HashMap<String, Object>();
    try {
        inputs = new InputStreamReader(new FileInputStream("/proc/stat"));
        buffer = new BufferedReader(inputs);
        String line = "";
        while (true) {
            line = buffer.readLine();
            if (line == null) {
                break;
            }
            if (line.startsWith("cpu")) {
                StringTokenizer tokenizer = new StringTokenizer(line);
                List<String> temp = new ArrayList<String>();
                while (tokenizer.hasMoreElements()) {
                    String value = tokenizer.nextToken();
                    temp.add(value);
                }
                map.put("user", temp.get(1));
                map.put("nice", temp.get(2));
                map.put("system", temp.get(3));
                map.put("idle", temp.get(4));
                map.put("iowait", temp.get(5));
                map.put("irq", temp.get(6));
                map.put("softirq", temp.get(7));
                map.put("stealstolen", temp.get(8));
                break;
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            buffer.close();
            inputs.close();
        } catch (Exception e2) {
            e2.printStackTrace();
        }
    }
    return map;
}

/**
 * 功能:內存使用率
 * */
public static int memoryUsage() {
    Map<String, Object> map = new HashMap<String, Object>();
    InputStreamReader inputs = null;
    BufferedReader buffer = null;
    try {
        inputs = new InputStreamReader(new FileInputStream("/proc/meminfo"));
        buffer = new BufferedReader(inputs);
        String line = "";
        while (true) {
            line = buffer.readLine();
            if (line == null)
                break;
            int beginIndex = 0;
            int endIndex = line.indexOf(":");
            if (endIndex != -1) {
                String key = line.substring(beginIndex, endIndex);
                beginIndex = endIndex + 1;
                endIndex = line.length();
                String memory = line.substring(beginIndex, endIndex);
                String value = memory.replace("kB", "").trim();
                map.put(key, value);
            }
        }

        long memTotal = Long.parseLong(map.get("MemTotal").toString());
        long memFree = Long.parseLong(map.get("MemFree").toString());
        long memused = memTotal - memFree;
        long buffers = Long.parseLong(map.get("Buffers").toString());
        long cached = Long.parseLong(map.get("Cached").toString());

        double usage = (double) (memused - buffers - cached) / memTotal * 100;
        return (int) usage;
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            buffer.close();
            inputs.close();
        } catch (Exception e2) {
            e2.printStackTrace();
        }
    }
    return 0;
}

}</pre>

 本文由用戶 ew45 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!