Linux下CPU、內存的利用率--調用命令獲取(一)

 
LinuxCPU、內存的利用率--調用命令獲取(一)
       怎麼獲取系統資源利用率,可以通過直接執行linux下的top命令實現。但需要注意Linux的版本問題,不同的版本輸出內容格式不一樣。這種方法不適合頻繁調用。
這個例子只包含獲取CPU利用率,內存的獲取原理一樣。
 
import java.io.*;
import java.util.StringTokenizer;

/**
 * 
@author nineday
 * 下午04:09:46, 2007-12-10
 
*/

public class Execute {
    
//private static final File memFile = new File("/proc/meminfo");
    private static final File versionFile = new File("/proc/version");
    
private static String linuxVersion = null;
    
    
    
static {
        InputStreamReader isr 
= null;
        BufferedReader brVer 
= null;
        StringTokenizer tokenVer 
= null;
        
try{
            isr 
= new InputStreamReader(new FileInputStream(versionFile));
            brVer 
= new BufferedReader(isr);
            tokenVer 
= new StringTokenizer(brVer.readLine());
            tokenVer.nextToken();
            tokenVer.nextToken();
            
            String version 
= tokenVer.nextToken();
            linuxVersion 
= version.subSequence(03).toString();
            System.out.println(
"Linux version:"+linuxVersion);
        }
catch(Exception e){
            e.printStackTrace();
        }
finally{
            freeResource(
null, isr, brVer);
        }

    }

    
    
    
//the test code
    public static void main(String[] args) {
        
try {
            
float usage = getCUPUsage();
            System.out.println(
"CPU usage: "+usage);
        }
 catch (Exception e) {
            e.printStackTrace();
        }

    }

    
    
    
    
/**
     * 
@return between 1 and 0
     
*/

    
private static float getCUPUsage(){
        InputStream is 
= null;
        InputStreamReader isr 
= null;
        BufferedReader brStat 
= null;
        StringTokenizer tokenStat 
= null;
        
try{
            System.out.println(
"Get usage rate of CUP , linux version: "+linuxVersion);

            Process process 
= Runtime.getRuntime().exec("top -b -n 1");
            is 
= process.getInputStream();                    
            isr 
= new InputStreamReader(is);
            brStat 
= new BufferedReader(isr);
            
            
if(linuxVersion.equals("2.4")){
                brStat.readLine();
                brStat.readLine();
                brStat.readLine();
                brStat.readLine();
                
                tokenStat 
= new StringTokenizer(brStat.readLine());
                tokenStat.nextToken();
                tokenStat.nextToken();
                String user 
= tokenStat.nextToken();
                tokenStat.nextToken();
                String system 
= tokenStat.nextToken();
                tokenStat.nextToken();
                String nice 
= tokenStat.nextToken();
                
                System.out.println(user
+" , "+system+" , "+nice);
                
                user 
= user.substring(0,user.indexOf("%"));
                system 
= system.substring(0,system.indexOf("%"));
                nice 
= nice.substring(0,nice.indexOf("%"));
                
                
float userUsage = new Float(user).floatValue();
                
float systemUsage = new Float(system).floatValue();
                
float niceUsage = new Float(nice).floatValue();
                
                
return (userUsage+systemUsage+niceUsage)/100;
            }
else{
                brStat.readLine();
                brStat.readLine();
                    
                tokenStat 
= new StringTokenizer(brStat.readLine());
                tokenStat.nextToken();
                tokenStat.nextToken();
                tokenStat.nextToken();
                tokenStat.nextToken();
                tokenStat.nextToken();
                tokenStat.nextToken();
                tokenStat.nextToken();
                String cpuUsage 
= tokenStat.nextToken();
                    
                
                System.out.println(
"CPU idle : "+cpuUsage);
                Float usage 
= new Float(cpuUsage.substring(0,cpuUsage.indexOf("%")));
                
                
return (1-usage.floatValue()/100);
            }


             
        }
 catch(IOException ioe){
            System.out.println(ioe.getMessage());
            freeResource(is, isr, brStat);
            
return 1;
        }
 finally{
            freeResource(is, isr, brStat);
        }


    }

    
    
    

    
private static void freeResource(InputStream is, InputStreamReader isr, BufferedReader br){
        
try{
            
if(is!=null)
                is.close();
            
if(isr!=null)
                isr.close();
            
if(br!=null)
                br.close();
        }
catch(IOException ioe){
            System.out.println(ioe.getMessage());
        }

    }

    
    
}
發佈了18 篇原創文章 · 獲贊 5 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章