思路:java代码读取linux主机的磁盘使用信息,同时截取出文件系统和已使用情况 放在map中可以得到keyvalue
package com.cmmb.util; import java.io.*; /** * linux 下cpu 内存 磁盘 jvm的使用监控 * @author avery_leo * */ public class DiskSpace { /** * 获取cpu使用情况 * @return * @throws Exception */ public double getcpuUsage() throws Exception { double cpuUsed = 0; Runtime rt = Runtime.getRuntime(); Process p = rt.exec("top -b -n 1");// 调用系统的“top"命令 BufferedReader in = null; try { in = new BufferedReader(new InputStreamReader(p.getInputStream())); String str = null; String[] strArray = null; while ((str = in.readLine()) != null) { int m = 0; if (str.indexOf(" R ") != -1) {// 只分析正在运行的进程,top进程本身除外 && strArray = str.split(" "); for (String tmp : strArray) { if (tmp.trim().length() == 0) continue; if (++m == 9) {// 第9列为cpu的使用百分比(RedHat cpuUsed += Double.parseDouble(tmp); } } } } } catch (Exception e) { e.printStackTrace(); } finally { in.close(); } return cpuUsed; } /** * 内存监控 * @return * @throws Exception */ public double getMemUsage() throws Exception { double menUsed = 0; Runtime rt = Runtime.getRuntime(); Process p = rt.exec("top -b -n 1");// 调用系统的“top"命令 BufferedReader in = null; try { in = new BufferedReader(new InputStreamReader(p.getInputStream())); String str = null; String[] strArray = null; while ((str = in.readLine()) != null) { int m = 0; if (str.indexOf(" R ") != -1) {// 只分析正在运行的进程,top进程本身除外 && // // System.out.println("------------------3-----------------"); strArray = str.split(" "); for (String tmp : strArray) { if (tmp.trim().length() == 0) continue; if (++m == 10) { // 9)--第10列为mem的使用百分比(RedHat 9) menUsed += Double.parseDouble(tmp); } } } } } catch (Exception e) { e.printStackTrace(); } finally { in.close(); } return menUsed; } /** * 获取磁盘空间大小 * * @return * @throws Exception */ public double getDeskUsage() throws Exception { double totalhd = 0; double usedhd = 0; Runtime rt = Runtime.getRuntime(); Process p = rt.exec("df -hl /home");//df -hl 查看硬盘空间 BufferedReader in = null; try { in = new BufferedReader(new InputStreamReader(p.getInputStream())); String str = null; String[] strArray = null; while ((str = in.readLine()) != null) { int m = 0; strArray = str.split(" "); for (String tmp : strArray) { if (tmp.trim().length() == 0) continue; ++m; System.out.println("----tmp----" + tmp); if (tmp.indexOf("G") != -1) { if (m == 2) { System.out.println("---G----" + tmp); if (!tmp.equals("") && !tmp.equals("0")) totalhd += Double.parseDouble(tmp .substring(0, tmp.length() - 1)) * 1024; } if (m == 3) { System.out.println("---G----" + tmp); if (!tmp.equals("none") && !tmp.equals("0")) usedhd += Double.parseDouble(tmp.substring( 0, tmp.length() - 1)) * 1024; } } if (tmp.indexOf("M") != -1) { if (m == 2) { System.out.println("---M---" + tmp); if (!tmp.equals("") && !tmp.equals("0")) totalhd += Double.parseDouble(tmp .substring(0, tmp.length() - 1)); } if (m == 3) { System.out.println("---M---" + tmp); if (!tmp.equals("none") && !tmp.equals("0")) usedhd += Double.parseDouble(tmp.substring( 0, tmp.length() - 1)); System.out.println("----3----" + usedhd); } } } } } catch (Exception e) { e.printStackTrace(); } finally { in.close(); } //上面写在userd和total写反了,懒得改了,就反着用了 System.out.println("----totalhd----" + usedhd); System.out.println("----usedhd----" + totalhd); return (totalhd / usedhd) * 100; } public static void main(String[] args) throws Exception { DiskSpace cpu = new DiskSpace(); System.out.println("---------------cpu used:" + cpu.getcpuUsage() + "%"); System.out.println("---------------mem used:" + cpu.getMemUsage() + "%"); System.out.println("---------------HD used:" + cpu.getDeskUsage() + "%"); System.out.println("------------jvm监控----------------------"); Runtime lRuntime = Runtime.getRuntime(); System.out.println("--------------Free Momery:" + lRuntime.freeMemory()+"K"); System.out.println("--------------Max Momery:" + lRuntime.maxMemory()+"K"); System.out.println("--------------Total Momery:" + lRuntime.totalMemory()+"K"); System.out.println("---------------Available Processors :" + lRuntime.availableProcessors()); } }