参考:
http://blog.csdn.net/java_lbvs/article/details/5128801
http://blog.csdn.net/xuanzezhejianchi/article/details/7961547
获取服务器基本信息:
http://blog.csdn.net/zhangxu365/article/details/6883573
http://www.linuxso.com/linuxbiancheng/13563.html
代码如下
package com.haierpip.util; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.LineNumberReader; import java.lang.management.ManagementFactory; import java.util.StringTokenizer; import com.sun.management.OperatingSystemMXBean; public class SystemUtil { private static final int CPUTIME = 500; private static final int PERCENT = 100; private static final int FAULTLENGTH = 10; /** * 获得Linux cpu使用率 * @return float efficiency * @throws IOException * @throws InterruptedException */ public static float getCpuInfo() throws IOException, InterruptedException { File file = new File("/proc/stat"); BufferedReader br = new BufferedReader(new InputStreamReader( new FileInputStream(file))); StringTokenizer token = new StringTokenizer(br.readLine()); token.nextToken(); long user1 = Long.parseLong(token.nextToken() + ""); long nice1 = Long.parseLong(token.nextToken() + ""); long sys1 = Long.parseLong(token.nextToken() + ""); long idle1 = Long.parseLong(token.nextToken() + ""); Thread.sleep(1000); br = new BufferedReader( new InputStreamReader(new FileInputStream(file))); token = new StringTokenizer(br.readLine()); token.nextToken(); long user2 = Long.parseLong(token.nextToken()); long nice2 = Long.parseLong(token.nextToken()); long sys2 = Long.parseLong(token.nextToken()); long idle2 = Long.parseLong(token.nextToken()); return (float) ((user2 + sys2 + nice2) - (user1 + sys1 + nice1)) * 100 / (float) ((user2 + nice2 + sys2 + idle2) - (user1 + nice1 + sys1 + idle1)); } // 获得cpu使用率 public static 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) * 1.0) / (busytime + idletime)) .intValue(); } else { return 0; } } catch (Exception ex) { ex.printStackTrace(); return 0; } } // 读取cpu相关信息 private static 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; } // 字段出现顺序:Caption,CommandLine,KernelModeTime,ReadOperationCount, // ThreadCount,UserModeTime,WriteOperation String caption = substring(line, capidx, cmdidx - 1).trim(); String cmd = substring(line, cmdidx, kmtidx - 1).trim(); if (cmd.indexOf("wmic.exe") >= 0) { continue; } String s1 = substring(line, kmtidx, rocidx - 1).trim(); String s2 = substring(line, umtidx, wocidx - 1).trim(); if (caption.equals("System Idle Process") || caption.equals("System")) { if (s1.length() > 0) { idletime += Long.valueOf(s1).longValue(); } if (s2.length() > 0) { idletime += Long.valueOf(s2).longValue(); } continue; } if (s1.length() > 0) { kneltime += Long.valueOf(s1).longValue(); } if (s2.length() > 0) { usertime += Long.valueOf(s2).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; } /** * 由于String.subString对汉字处理存在问题(把一个汉字视为一个字节),因此在 包含汉字的字符串时存在隐患,现调整如下: * * @param src * 要截取的字符串 * @param start_idx * 开始坐标(包括该坐标) * @param end_idx * 截止坐标(包括该坐标) * @return */ private 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; } // 获取内存使用率 public static double getMemery() { OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory .getOperatingSystemMXBean(); // 总的物理内存+虚拟内存 long totalvirtualMemory = osmxb.getTotalSwapSpaceSize(); // 剩余的物理内存 long freePhysicalMemorySize = osmxb.getFreePhysicalMemorySize(); Double compare = (Double) (1 - freePhysicalMemorySize * 1.0 / totalvirtualMemory) * 100; return compare.intValue(); } }
/** * @Purpose:采集网络带宽使用率 * @param args */ public static float getNetInfo() { float curRate = 0.0f; Process pro1,pro2; Runtime r = Runtime.getRuntime(); try { String command = "cat /proc/net/dev"; //第一次采集流量数据 long startTime = System.currentTimeMillis(); pro1 = r.exec(command); BufferedReader in1 = new BufferedReader(new InputStreamReader(pro1.getInputStream())); String line = null; long inSize1 = 0, outSize1 = 0; while((line=in1.readLine()) != null){ line = line.trim(); if(line.startsWith("em3")){ String[] temp = line.split("\\s+"); inSize1 = Long.parseLong(temp[1].substring(5)); //Receive bytes,单位为Byte outSize1 = Long.parseLong(temp[8]); //Transmit bytes,单位为Byte break; } } in1.close(); pro1.destroy(); try { Thread.sleep(1000); } catch (InterruptedException e) { StringWriter sw = new StringWriter(); e.printStackTrace(new PrintWriter(sw)); } //第二次采集流量数据 long endTime = System.currentTimeMillis(); pro2 = r.exec(command); BufferedReader in2 = new BufferedReader(new InputStreamReader(pro2.getInputStream())); long inSize2 = 0 ,outSize2 = 0; while((line=in2.readLine()) != null){ line = line.trim(); if(line.startsWith("em3")){ String[] temp = line.split("\\s+"); inSize2 = Long.parseLong(temp[1].substring(5)); outSize2 = Long.parseLong(temp[8]); break; } } if(inSize1 != 0 && outSize1 !=0 && inSize2 != 0 && outSize2 !=0){ float interval = (float)(endTime - startTime)/1000; //网口传输速度,单位为bps curRate = (float)(inSize2 - inSize1 + outSize2 - outSize1)*8/(1000000*interval); } in2.close(); pro2.destroy(); } catch (IOException e) { StringWriter sw = new StringWriter(); e.printStackTrace(new PrintWriter(sw)); } return curRate; }