liunx系统监控

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();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值