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)); } }
{
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));
}
}
2楼的token是什么?user,nice,sys,idle分别代表什么?
cpu 17906755 86377 53312329 1322524322 29311124 101704 1096939
cpu0 4665564 22883 13417357 330376020 7206071 99986 297154
cpu1 4488897 20352 13351971 330749128 7202582 0 271926
cpu2 4434851 22675 13302518 330622140 7455115 1718 245786
cpu3 4317443 20467 13240483 330777034 7447356 0 282073
第一行是总的情况
第二行到第五行分别代表每个cpu的情况
对这个文件需要读取两遍,我们用total表示累计总资源,那么user+sys就是我们想要知道的累计CPU占用的资源。每个变量后面的数字表示它是第几次读文件得到的,用如下方法可算出CPU占用率:
Total_1=user_1+nice_1+sys_1+idle_1
Total_2=user_2+nice_2+sys_2+idle_2
Rate={[(user_2+sys_2)-(user_1+sys_1)]/(total_2-total_1)}*100
由于我们两次读取的时间间隔比较短,我们就近似的认为这就是即时的CPU利用率。
/proc下都是内存中的snapshot,不是普通文件
系统会自动累积。
谢谢!
再问个问题!
在 Linux下的网络连接问题,Java语言解决!!
比如说当前的连接情况什么的!
一般是查看eth0 eth1 你自己分析下吧。
windows下应该依然是调dll
tcp连接应该是/proc/net/tcp error
除了第一行 每行一个