package test1;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public final class LinuxSystemTool {
/**
* 获取mem信息 "/proc/meminfo"里面包含的就是内存的信息,还包括了swap的信息
*
* $ cat /proc/meminfo
*
* total: used: free: shared: buffers: cached: Mem: 1057009664 851668992
* 205340672 0 67616768 367820800 Swap: 2146787328 164429824 1982357504
* MemTotal: 1032236 kB MemFree: 200528 kB MemShared: 0 kB
*
* @throws FileNotFoundException
*/
public static int[] getMemInfo() throws Exception {
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;
}
/**
* cpu "/proc/stat"里面就包含了CPU的信息 cpu0 256279030 0 11832528 1637168262
* 每一个CPU的每一tick用在什么地方都在这个文件里面记着。后面的数字含义分 别是:
* user、nice、sys、idle、iowait。有些版本的kernel没有iowait这一项。这些数值表示从开机到现在,CPU的每tick用
* 在了哪里。例如: 1 cpu0 256279030 0 11832528 1637168262 就是cpu0从开机到现在有 256279030
* tick用在了user消耗,11832528用在了sys消耗。所以如果想计算单位时间(例如1s)里面CPU的负载,
* 那只需要计算1秒前后数值的差除以每一秒的tick数量就可以了。
*
* @throws Exception
*/
public static float getCpuInfo() throws Exception {
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));
}
/**
* cpu温度 temperature: 68C,/proc/acpi/thermal_zone/THM/temperature温度信息
*
* @throws FileNotFoundException
*/
public static String getCpuTemperature() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(new File(
"/proc/acpi/thermal_zone/THM/temperature"))));
return br.readLine();
}
}
liunx系统监控
最新推荐文章于 2024-06-16 23:22:16 发布