參數
|
解析(單位:jiffies)
|
user (2032004)
|
從系統啓動開始累計到當前時刻,用戶態的CPU時間,不包含 nice值爲負進程。
|
nice (102648)
|
從系統啓動開始累計到當前時刻,nice值爲負的進程所佔用的CPU時間
|
system (238344)
|
從系統啓動開始累計到當前時刻,核心時間
|
idle (167130733)
|
從系統啓動開始累計到當前時刻,除硬盤IO等待時間以外其它等待時間
|
iowait (758440)
|
從系統啓動開始累計到當前時刻,硬盤IO等待時間
|
irq (15159)
|
從系統啓動開始累計到當前時刻,硬中斷時間
|
softirq (17878)
|
從系統啓動開始累計到當前時刻,軟中斷時間
|
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class MonitorUsageThread extends Thread{
private final int frequency;//MS
private static final File memFile = new File("/proc/meminfo");
private static final File statFile = new File("/proc/stat");
private static BufferedReader brMem ;
private static BufferedReader brStat ;
private static InputStreamReader isr = null;
private static float cpuUsage;
private static float memUsage;
private static boolean on = true;
public MonitorUsageThread(int frequency){
this.frequency = frequency;
}
public void run(){
System.out.println("MonitorUsageThread start run ..................... on: "+on);
String str = null;
StringTokenizer tokenMem = null;
int memTotal = 0;
int memFree = 0;
int userStart,niceStart,sysStart,idleStart,iowaitStart,hardirpStart,softirpStart,userEnd,niceEnd,sysEnd,idleEnd,iowaitEnd,hardirpEnd,softirpEnd;
try {
isr = new InputStreamReader(new FileInputStream(statFile));
brStat = new BufferedReader(isr);
StringTokenizer tokenStat = new StringTokenizer(brStat.readLine());
tokenStat.nextToken();
userStart = Integer.parseInt(tokenStat.nextToken());
niceStart = Integer.parseInt(tokenStat.nextToken());
sysStart = Integer.parseInt(tokenStat.nextToken());
idleStart = Integer.parseInt(tokenStat.nextToken());
iowaitStart = Integer.parseInt(tokenStat.nextToken());
hardirpStart = Integer.parseInt(tokenStat.nextToken());
softirpStart = Integer.parseInt(tokenStat.nextToken());
Thread.sleep(frequency);
while(on){
isr = new InputStreamReader(new FileInputStream(statFile));
brStat = new BufferedReader(isr);
tokenStat = new StringTokenizer(brStat.readLine());
tokenStat.nextToken();
userEnd = Integer.parseInt(tokenStat.nextToken());
niceEnd = Integer.parseInt(tokenStat.nextToken());
sysEnd = Integer.parseInt(tokenStat.nextToken());
idleEnd = Integer.parseInt(tokenStat.nextToken());
iowaitEnd = Integer.parseInt(tokenStat.nextToken());
hardirpEnd = Integer.parseInt(tokenStat.nextToken());
softirpEnd = Integer.parseInt(tokenStat.nextToken());
int CPUEnd = userEnd+niceEnd+sysEnd+idleEnd+iowaitEnd+hardirpEnd+softirpEnd;
int CPUStart = userStart+niceStart+sysStart+idleStart+iowaitStart+hardirpStart+softirpStart;
System.out.println("idleEnd:"+idleEnd+" , idleStart:"+idleStart+" ,CPUEnd:"+CPUEnd+" , CPUStart:"+CPUStart);
cpuUsage = 1- (float)(idleEnd - idleStart) / (float)(CPUEnd - CPUStart);// cpu usage
//Gets memory information
isr = new InputStreamReader(new FileInputStream(memFile));
brMem = new BufferedReader(isr);
str = brMem.readLine();
tokenMem = new StringTokenizer(str);
tokenMem.nextToken();
memTotal = Integer.parseInt(tokenMem.nextToken());
str = brMem.readLine();
tokenMem = new StringTokenizer(str);
tokenMem.nextToken();
memFree = Integer.parseInt(tokenMem.nextToken());
System.out.println("MemTotal:"+memTotal+" , MemFree:"+memFree);
memUsage = (float)(memTotal-memFree) / (float)memTotal;// memory usage
userStart = userEnd;
niceStart = niceEnd;
sysStart = sysEnd;
idleStart = idleEnd;
iowaitStart = iowaitEnd;
hardirpStart = hardirpEnd;
softirpStart = softirpEnd;
System.out.println("Rate of CPU usage is "+cpuUsage+" , and the memory's is "+memUsage+" ");
Thread.sleep(frequency);//
}
} catch (IOException ioe) {
System.out.println(ioe.getMessage());
} catch (InterruptedException ie) {
System.out.println(ie.getMessage());
} finally{
freeResource();
}
}
private static void freeResource(){
try{
if(isr!=null)
isr.close();
if(brMem!=null)
brMem.close();
if(brStat!=null)
brStat.close();
}catch(IOException ioe){
System.out.println(ioe.getMessage());
}
}
public static float getCPUUsage(){
return cpuUsage;
}
public static float getMemoryUsage(){
return memUsage;
}
public static void stopMonitor(){
on = false;
freeResource();
}
public static void main(String[] args){
MonitorUsageThread thread = new MonitorUsageThread(2000);
thread.start();
try{
Thread.sleep(10000);//MS
}catch(InterruptedException ie){
ie.printStackTrace();
}
System.out.println();
System.out.println("-------------CPU usage: "+getCPUUsage());
System.out.println("-------------Memory usage: "+getMemoryUsage());
try{
Thread.sleep(5000);//MS
}catch(InterruptedException ie){
ie.printStackTrace();
}
System.out.println();
System.out.println("-------------CPU usage: "+getCPUUsage());
System.out.println("-------------Memory usage: "+getMemoryUsage());
thread.stopMonitor();
System.exit(0);
}
}