如何获得主机的CPU利用率!Java问题!!

guangmang_78 2008-04-28 11:15:35
在 Linux 下,如何获得主机的CPU利用率!Java问题!!
...全文
158 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
guangmang_78 2008-04-28
  • 打赏
  • 举报
回复
1楼能不能说的详细点啊!
2楼的token是什么?user,nice,sys,idle分别代表什么?
SWind 2008-04-28
  • 打赏
  • 举报
回复
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));
}
}
吴冬冬 2008-04-28
  • 打赏
  • 举报
回复
通过JMX
SWind 2008-04-28
  • 打赏
  • 举报
回复
刚才发的是流量
tcp连接应该是/proc/net/tcp error
除了第一行 每行一个
SWind 2008-04-28
  • 打赏
  • 举报
回复
linux下应该是/proc/net/dev
一般是查看eth0 eth1 你自己分析下吧。
windows下应该依然是调dll
guangmang_78 2008-04-28
  • 打赏
  • 举报
回复
好的谢谢了
再问个问题!
在 Linux下的网络连接问题,Java语言解决!!
比如说当前的连接情况什么的!
SWind 2008-04-28
  • 打赏
  • 举报
回复
windows下面就麻烦了 应该只能通过JNI调vc写的dll
guangmang_78 2008-04-28
  • 打赏
  • 举报
回复
那如果在windows系统中如何实现啊!
谢谢!
SWind 2008-04-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lastsweetop 的回复:]
有这样的文件?
如果是文件那不是固定数据的吗?取来有何用?
[/Quote]

/proc下都是内存中的snapshot,不是普通文件
系统会自动累积。
吴冬冬 2008-04-28
  • 打赏
  • 举报
回复
有这样的文件?
如果是文件那不是固定数据的吗?取来有何用?
SWind 2008-04-28
  • 打赏
  • 举报
回复
user system nice idle iowait irq softirq
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利用率。
天野翼 2008-04-28
  • 打赏
  • 举报
回复
关注中
吴冬冬 2008-04-28
  • 打赏
  • 举报
回复
2楼的是磁盘情况吧

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧