当前位置: 技术问答>linux和unix
用JAVA取得LINUX系统的CPU使用率,关于LINUX版本问题(在线等)
来源: 互联网 发布时间:2016-08-10
本文导语: /** * 获得Linux CPU使用率. * @return 返回cpu使用率 */ private double getCpuRateForLinux() { InputStream is = null; InputStreamReader isr = null; BufferedReader brStat = null; ...
/**
* 获得Linux CPU使用率.
* @return 返回cpu使用率
*/
private double getCpuRateForLinux() {
InputStream is = null;
InputStreamReader isr = null;
BufferedReader brStat = null;
StringTokenizer tokenStat = null;
try {
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")) { // 问题点:为什么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);
}
}
在网上找的这么一段代码,我搞不懂为什么会有这个分支:if (linuxVersion.equals("2.4"))
只有2.4版本的单独处理,其它版本统一处理,如果是2.41版本的,应该走哪个分支呢?
我担心上面这段代码不能在所有的LINUX系统上使用。
LINUX知识不太懂。望大牛们指点一二。
|
只有2.4版本的单独处理,其它版本统一处理,如果是2.41版本的,应该走哪个分支呢?
-----------------
貌似还没有2.41这样的版本 现在最高是2.6
如果你要说2.4.1的话 是属于2.4的
2.4到2.6跨度还是比较大的
你这个java程序 也是调用系统的top命令来获取信息的吧 所以只要top命令有更新 显示格式变了的话 估计就不会满足要求了 毕竟你不是从底层直接得到的信息
你可以参照一下http://space.itpub.net/9623896/viewspace-77874 了解一下linux的版本号命名规则
-----------------
貌似还没有2.41这样的版本 现在最高是2.6
如果你要说2.4.1的话 是属于2.4的
2.4到2.6跨度还是比较大的
你这个java程序 也是调用系统的top命令来获取信息的吧 所以只要top命令有更新 显示格式变了的话 估计就不会满足要求了 毕竟你不是从底层直接得到的信息
你可以参照一下http://space.itpub.net/9623896/viewspace-77874 了解一下linux的版本号命名规则
|
2.4内核没用过,对比一下返回结果就可以了。
在2.6内核上:
[lihua@wuqingmin ~]$ top -b -n 1
top - 14:15:29 up 3:38, 2 users, load average: 0.21, 0.32, 0.17
Tasks: 182 total, 1 running, 181 sleeping, 0 stopped, 0 zombie
Cpu(s): 15.3%us, 6.6%sy, 0.2%ni, 75.9%id, 1.6%wa, 0.1%hi, 0.2%si, 0.0%st
Mem: 2028408k total, 1634828k used, 393580k free, 204900k buffers
Swap: 2104504k total, 0k used, 2104504k free, 868212k cached
在2.6内核上:
[lihua@wuqingmin ~]$ top -b -n 1
top - 14:15:29 up 3:38, 2 users, load average: 0.21, 0.32, 0.17
Tasks: 182 total, 1 running, 181 sleeping, 0 stopped, 0 zombie
Cpu(s): 15.3%us, 6.6%sy, 0.2%ni, 75.9%id, 1.6%wa, 0.1%hi, 0.2%si, 0.0%st
Mem: 2028408k total, 1634828k used, 393580k free, 204900k buffers
Swap: 2104504k total, 0k used, 2104504k free, 868212k cached
|
你linuxVersion print出来看看是什么先嘛。。。
他可能是写在2.6上跑的程序或在2.2上跑的,所以2.4是特殊的。。。
他可能是写在2.6上跑的程序或在2.2上跑的,所以2.4是特殊的。。。
|
top命令是属于procps这个包 你可以把源码包下载下来去研究一下相关代码 看能不能用C写一个更通用的
|
那个代码已经考虑了2.4和2.6版本的内核的情况 应该已经差不多了 2.2以前内核的我都没用过
以后新内核有没有变化 谁也不知道
以后新内核有没有变化 谁也不知道