在 Linux 下,如何获得主机的CPU利用率!Java问题!!

解决方案 »

  1.   

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

  2.   

    1楼能不能说的详细点啊!
    2楼的token是什么?user,nice,sys,idle分别代表什么?
      

  3.   

         user     system nice     idle       iowait   irq    softirq
    cpu  17906755 86377  53312329 1322524322 29311124 101704 1096939
    cpu0 4665564  22883  13417357 330376020  7206071  99986  297154
    cpu1 4488897  20352  13351971 330749128  7202582  0      271926
    cpu2 4434851  22675  13302518 330622140  7455115  1718   245786
    cpu3 4317443  20467  13240483 330777034  7447356  0      282073
    第一行是总的情况
    第二行到第五行分别代表每个cpu的情况
     
    对这个文件需要读取两遍,我们用total表示累计总资源,那么user+sys就是我们想要知道的累计CPU占用的资源。每个变量后面的数字表示它是第几次读文件得到的,用如下方法可算出CPU占用率:
    Total_1=user_1+nice_1+sys_1+idle_1
    Total_2=user_2+nice_2+sys_2+idle_2
    Rate={[(user_2+sys_2)-(user_1+sys_1)]/(total_2-total_1)}*100
    由于我们两次读取的时间间隔比较短,我们就近似的认为这就是即时的CPU利用率。
      

  4.   


    /proc下都是内存中的snapshot,不是普通文件
    系统会自动累积。
      

  5.   

    那如果在windows系统中如何实现啊!
    谢谢!
      

  6.   

    windows下面就麻烦了 应该只能通过JNI调vc写的dll
      

  7.   

    好的谢谢了 
    再问个问题!
    在 Linux下的网络连接问题,Java语言解决!! 
    比如说当前的连接情况什么的!
      

  8.   

    linux下应该是/proc/net/dev
    一般是查看eth0 eth1 你自己分析下吧。
    windows下应该依然是调dll
      

  9.   

    刚才发的是流量
    tcp连接应该是/proc/net/tcp error
    除了第一行 每行一个