用java取得linux系统cpu、内存的实时信息

    技术2022-05-11  137

       很想写些话在最前面,但是真的不知道该说什么好。   很快的,2005年已经过去,这几天一直打算要在2005年内再写几篇的,可惜,每次都是忙的要死,要不就是有别的事情,一直推倒2005年的最后一天晚上。   本来已经决定了一定要完成的,都怪湖南卫视台的那个跨年度演唱会啊,竟然一直到12点以后才结束,我又不舍的离开,没办法。   可见我就是这样一个人,对于已定的计划总是有理由去拖延 :)   回头看看,已经1个多月没有发帖子了,感觉很遗憾,就这样走完了2005年。这一年发生了很多事情,也有很多事情没有机会发生,更有很多事情没来得及发生,回首刚刚过去的年度,感慨良多啊……

       回归正题吧,前些天正好需要完成一个实时分析linux系统CPU、内存使用情况的功能,类似于windows任务管理器的那种。当时搜了很多帖子出来,有些比较深刻,但是用Java调用起来比较麻烦,又要用jni、又要写C,在万般无奈之下翻阅了一些linux的相关资料,竟然得知linux系统中/proc/目录下有存放系统信息的文件,大喜过望啊!   在这个辞旧迎新的夜晚,记录下来,方便以后随时查阅,嘿嘿……

    import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;/** * 取得linux系统下的cpu、内存信息 *  * <p>@author javer QQ:84831612</p> * @date 2005 */public final class LinuxSystemTool{   /**   * get memory by used info   *    * @return int[] result   * result.length==4;int[0]=MemTotal;int[1]=MemFree;int[2]=SwapTotal;int[3]=SwapFree;   * @throws IOException   * @throws InterruptedException   */   public static int[] getMemInfo() throws IOException, InterruptedException   {      File file = new File("/proc/meminfo");      BufferedReader br = new BufferedReader(new InputStreamReader(      new FileInputStream(file)));      int[] result = new int[4];      String str = null;      StringTokenizer token = null;      while((str = br.readLine()) != null)      {         token = new StringTokenizer(str);         if(!token.hasMoreTokens())            continue;            str = token.nextToken();         if(!token.hasMoreTokens())            continue;            if(str.equalsIgnoreCase("MemTotal:"))            result[0] = Integer.parseInt(token.nextToken());         else if(str.equalsIgnoreCase("MemFree:"))            result[1] = Integer.parseInt(token.nextToken());         else if(str.equalsIgnoreCase("SwapTotal:"))            result[2] = Integer.parseInt(token.nextToken());         else if(str.equalsIgnoreCase("SwapFree:"))            result[3] = Integer.parseInt(token.nextToken());      }         return result;   }   /**   * get memory by used info   *    * @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();      int user1 = Integer.parseInt(token.nextToken());      int nice1 = Integer.parseInt(token.nextToken());      int sys1 = Integer.parseInt(token.nextToken());      int idle1 = Integer.parseInt(token.nextToken());         Thread.sleep(1000);      br = new BufferedReader(      new InputStreamReader(new FileInputStream(file)));      token = new StringTokenizer(br.readLine());      token.nextToken();      int user2 = Integer.parseInt(token.nextToken());      int nice2 = Integer.parseInt(token.nextToken());      int sys2 = Integer.parseInt(token.nextToken());      int idle2 = Integer.parseInt(token.nextToken());      return (float)((user2 + sys2 + nice2) - (user1 + sys1 + nice1)) / (float)((user2 + nice2 + sys2 + idle2) - (user1 + nice1 + sys1 + idle1));   }}

    /** * 测试类 *  * <p>@author javer QQ:84831612</p> * @date 2005 */public class JaverTest{    public static void main(String[] args) throws Exception    {        int[] memInfo = LinuxSystemTool.getMemInfo();        System.out.println("MemTotal:" + memInfo[0]);        System.out.println("MemFree:" + memInfo[1]);        System.out.println("SwapTotal:" + memInfo[2]);        System.out.println("SwapFree:" + memInfo[3]);        System.out.println("CPU利用率:" + LinuxSystemTool.getCpuInfo());    }}


    最新回复(0)