Java获取Linux系统cpu使用率详解编程语言

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; 
    } 
}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/10229.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论