2012-05-13 90 views
-4

CPU的使用率和內存的信息這是一個Java代碼中,我從網上搜索:http://avery-leo.iteye.com/blog/298724如何調試此Java代碼?該代碼旨在幫助在Linux系統

它的目標是讓在Linux系統中的CPU使用率和內存信息。我在eclipse中編譯它,發現如下兩個錯誤:

private Config config=Config.getInstance(); 
SnmpUtil util=new SnmpUtil(); 

我也在註釋部分用粗體標出。

我認爲這兩個錯誤是由於缺乏類ConfigSnmpUtil引起的,我試圖從Internet上搜索並下載一個config.jar並將它添加到lib中,但它仍然不起作用!我需要你的幫助!!

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.InetAddress; 
import java.util.StringTokenizer; 

import org.apache.log4j.Logger; 

/** 
* To get the cpu usage and memory in Linux system 
* 
* <p> 
*/ 
public final class LinuxSystemTool implements Runnable{ 
    private Logger log = Logger.getLogger(LinuxSystemTool.class); 
    private Config config=Config.getInstance(); //**Error when compiled** 
    /** 
    * 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 void run() { 
    // TODO Auto-generated method stub 

    while (true) { 

     try { 
      exec(); 
      Thread.sleep(config.getThreadTime()); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      log.error("Performance Monitoring error:"+e.getMessage()); 
      e.printStackTrace(); 
     } 
    } 
} 
public void exec() throws Exception { 
//  ServerStatus ss = new ServerStatus(); 

    InetAddress inet = InetAddress.getLocalHost(); 
    System.out.println("Performance Monitoring ip:"+inet.toString()); 

    String ip=inet.toString().substring(inet.toString().indexOf("/")+1); 
    log.info("Performance Monitoring ip:"+ip); 

    int[] memInfo = LinuxSystemTool.getMemInfo(); 
    System.out.println("MemTotal:" + memInfo[0]); 
    System.out.println("MemFree:" + memInfo[1]); 

    SnmpUtil util=new SnmpUtil(); //**Error when compiled** 
    util.setCPU(getCpuInfo()); 
// util.setDISK(1); 
    util.setMEM(memInfo[0]/memInfo[1]); 
    util.setIP(ip); 

} 
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 
* </p> 
* @date 
*/ 

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 use ratio:" + LinuxSystemTool.getCpuInfo()); 
} 
} 
+0

如果編譯器說這些類是缺少的 - 那些類只是缺少... – home

+0

它怎麼能得到這些缺少的類? – DreamchaserHou

+1

您需要使用snmp4j庫進行系統信息管理。 –

回答

3

你需要snmp4j jar來進行snmp相關的java開發。你可以從here得到。

希望這會爲你工作。

+0

+1對於答案... – 2012-05-15 04:47:30