学院首页>网络编程>JSP>用java取得linux系统cpu、内存的实时信息

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

作者: 来源: 添加时间:2006-5-21 20:52:55
前些天正好需要完成一个实时分析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());
    }
}

站内搜索