http://hhhk.iteye.com/blog/1197434

java 获取进程ID
Java代码   收藏代码
  1. import java.io.BufferedReader;  
  2. import java.io.IOException;  
  3. import java.io.InputStreamReader;  
  4. import java.math.BigDecimal;  
  5.   
  6. import org.apache.log4j.Logger;  
  7.   
  8. import sun.management.ManagementFactory;  
  9.   
  10. import com.ailk.ts.message.bean.MonitorInfoBean;  
  11.   
  12. public class SystemInfoTools {  
  13.     final static boolean isNotWindows = System.getProperties().getProperty("os.name").toLowerCase().indexOf("windows") < 0;  
  14.     final static BigDecimal DIVISOR = BigDecimal.valueOf(1024);  
  15.     private final static Logger logger = Logger.getLogger(SystemInfoTools.class);  
  16.       
  17.     public static int getPid(){  
  18.         return Integer.parseInt(ManagementFactory.getRuntimeMXBean().getName().split("@")[0]);  
  19.     }  
  20.       
  21.     public static MonitorInfoBean getMonitorInfoBean() {  
  22.         MonitorInfoBean monitorInfo = new MonitorInfoBean();  
  23.         if(!isNotWindows){  
  24.             monitorInfo.setMemUsage(500);  
  25.             return monitorInfo;  
  26.         }  
  27.         Runtime rt = Runtime.getRuntime();  
  28.         BufferedReader in = null;  
  29.         try {  
  30.             int pid = getPid();  
  31.             String[] cmd = {  
  32.                     "/bin/sh",  
  33.                     "-c",  
  34.                     "top -b -n 1 | grep " + pid  
  35.                     };  
  36.             Process p = rt.exec(cmd);  
  37.             in = new BufferedReader(new InputStreamReader(p.getInputStream()));  
  38.             String str = null;  
  39.             String[] strArray = null;  
  40.             while ((str = in.readLine()) != null) {  
  41.                 logger.debug("top: " + str);  
  42.                 int m = 0;  
  43.                 strArray = str.split(" ");  
  44.                 for (int i = 0; i < strArray.length; i++) {  
  45.                     String info = strArray[i];  
  46.                     if (info.trim().length() == 0){  
  47.                         continue;  
  48.                     }  
  49.                     if(m == 5) {//第5列为进程占用的物理内存值  
  50.                         String unit = info.substring(info.length() - 1);  
  51.                         if(unit.equalsIgnoreCase("g")) {  
  52.                             monitorInfo.setMemUseSize(Double.parseDouble(info));  
  53.                         } else if(unit.equalsIgnoreCase("m")) {  
  54.                             BigDecimal memUseSize = new BigDecimal(info.substring(0, info.length() - 1));  
  55.                             monitorInfo.setMemUseSize(memUseSize.divide(DIVISOR, 2, BigDecimal.ROUND_HALF_UP).doubleValue());  
  56.                         } else {  
  57.                             BigDecimal memUseSize = new BigDecimal(info).divide(DIVISOR);  
  58.                             monitorInfo.setMemUseSize(memUseSize.divide(DIVISOR, 2, BigDecimal.ROUND_HALF_UP).doubleValue());  
  59.                         }  
  60.                     }  
  61.                     if(m == 8) {//第9列为CPU的使用百分比  
  62.                         monitorInfo.setCpuUsage(Double.parseDouble(info));  
  63.                     }  
  64.                     if(m == 9) {//第10列为内存的使用百分比  
  65.                         monitorInfo.setMemUsage(Double.parseDouble(info));  
  66.                     }  
  67.                     m++;  
  68.                 }  
  69.             }  
  70.         } catch (IOException e) {  
  71.             e.printStackTrace();  
  72.         } finally {  
  73.             try {  
  74.                 in.close();  
  75.             } catch (IOException e) {  
  76.                 e.printStackTrace();  
  77.             }  
  78.         }  
  79.           
  80.         return monitorInfo;  
  81.     }  
  82.   
  83. }  

 

MonitorInfoBean.java

 

 

Java代码   收藏代码
  1. public class MonitorInfoBean {  
  2.   
  3.     /** cpu使用率 */  
  4.     private double cpuUsage;  
  5.   
  6.     /** 内存使用率 */  
  7.     private double memUsage;  
  8.   
  9.     /** 内存使用的大小 */  
  10.     private double memUseSize;  
  11.   
  12.     public double getCpuUsage() {  
  13.         return cpuUsage;  
  14.     }  
  15.   
  16.     public void setCpuUsage(double cpuUsage) {  
  17.         this.cpuUsage = cpuUsage;  
  18.     }  
  19.   
  20.     public double getMemUsage() {  
  21.         return memUsage;  
  22.     }  
  23.   
  24.     public void setMemUsage(double memUsage) {  
  25.         this.memUsage = memUsage;  
  26.     }  
  27.   
  28.     public double getMemUseSize() {  
  29.         return memUseSize;  
  30.     }  
  31.   
  32.     public void setMemUseSize(double memUseSize) {  
  33.         this.memUseSize = memUseSize;  
  34.     }  
  35.   
  36. }  
物理内存 cpu使用百分比(linux环境)

Logo

更多推荐