关于
我的项目
相关阅读
无关联文章
热度排行
- [转] 宫崎骏用动漫教给我们的人生哲理,每一句都能说到心里! - (日期:[八月 24, 2013] 点击:[53,283])
- Google 网页爬虫报告无法连接站点解决办法 - (日期:[七月 20, 2014] 点击:[38,641])
- 架设Tiny Tiny RSS(TTRSS)阅读器,找回Google Reader! - (日期:[九月 27, 2013] 点击:[27,770])
- SkyDrive、DropBox和Google Drive三大公有云存储服务对比 - (日期:[六月 25, 2013] 点击:[25,579])
- 升级到至强E5440后,与i5 CPU笔记本性能对比 - (日期:[二月 18, 2014] 点击:[23,724])
- 公钥私钥加密解密数字证书数字签名详解 - (日期:[四月 19, 2014] 点击:[22,963])
- 本站建站技术合集 - (日期:[九月 20, 2013] 点击:[22,500])
- 使用OpenerDNS解决无法访问Google的问题 - (日期:[七月 5, 2014] 点击:[21,793])
- WordPress博客添加“返回顶部”按钮 - (日期:[七月 14, 2013] 点击:[21,210])
- Linux文件系统基础之inode和dentry - (日期:[三月 13, 2015] 点击:[20,170])
- 云存储中的HTTP鉴权算法分析 - (日期:[二月 7, 2014] 点击:[18,642])
- 存储基础知识之——磁盘阵列原理及操作实战 - (日期:[二月 9, 2014] 点击:[17,497])
- 精选37条强大的常用linux shell命令组合 - (日期:[九月 4, 2013] 点击:[17,429])
- DNS原理、架构和配置详解 - (日期:[九月 6, 2013] 点击:[16,807])
- Netty和Jetty的Java NIO 网络框架模型分析 - (日期:[七月 13, 2013] 点击:[16,336])
- CoreOS 初识之安装 - (日期:[十一月 16, 2014] 点击:[16,171])
- Windows与Linux文件系统互访的几种方法 - (日期:[八月 21, 2014] 点击:[15,734])
- Dijkstra算法求解最短路径分析 - (日期:[七月 12, 2014] 点击:[14,927])
- NAS解决方案实现多媒体文件共享播放 - (日期:[十二月 21, 2014] 点击:[13,924])
- 简介 - (日期:[九月 1, 2012] 点击:[13,761])
- 如何编程实现 2 + 2 = 5? - (日期:[六月 2, 2014] 点击:[13,270])
- 搭建了一个iNews程序 - (日期:[十月 15, 2013] 点击:[13,242])
- 2014年9月曝出的Bash ShellShock漏洞简析 - (日期:[九月 26, 2014] 点击:[13,140])
- 彻底解决WordPress博客垃圾评论的问题 - (日期:[八月 5, 2013] 点击:[13,091])
- 如何使用1M的内存排序100万个8位数 - (日期:[三月 27, 2014] 点击:[12,555])
- 全部日志列表 - (日期:[十一月 11, 2012] 点击:[12,335])
- 关于回调函数和this指针探讨 - (日期:[八月 24, 2014] 点击:[12,211])
- 给定一个long型常量,其值为x,给定long型变量a,要求a & x 的取值集合 - (日期:[九月 8, 2012] 点击:[11,708])
- WordPress建站必备实用插件 - (日期:[八月 7, 2014] 点击:[11,361])
- 开源好用的电子书管理服务Talebook(Calibre网络版)安装使用指南 - (日期:[四月 23, 2022] 点击:[11,291])
分类目录
文章归档
- 2024年十二月 (1)
- 2024年四月 (1)
- 2024年二月 (1)
- 2023年九月 (1)
- 2023年一月 (1)
- 2022年十月 (1)
- 2022年八月 (2)
- 2022年四月 (1)
- 2022年三月 (1)
- 2021年十二月 (2)
- 2021年十月 (2)
- 2021年九月 (1)
- 2021年八月 (1)
- 2021年五月 (1)
- 2021年三月 (2)
- 2021年一月 (2)
- 2020年十二月 (5)
- 2020年十一月 (2)
- 2020年十月 (2)
- 2020年九月 (1)
- 2020年八月 (5)
- 2020年七月 (2)
- 2019年九月 (1)
- 2018年八月 (1)
- 2018年七月 (1)
- 2018年六月 (1)
- 2018年五月 (1)
- 2018年三月 (1)
- 2018年二月 (1)
- 2018年一月 (2)
- 2017年十二月 (3)
- 2017年十月 (4)
- 2017年九月 (1)
- 2017年七月 (1)
- 2017年六月 (1)
- 2016年十二月 (1)
- 2016年十月 (1)
- 2016年九月 (1)
- 2016年七月 (2)
- 2016年六月 (1)
- 2016年二月 (3)
- 2015年十二月 (3)
- 2015年十一月 (2)
- 2015年十月 (1)
- 2015年八月 (2)
- 2015年七月 (4)
- 2015年六月 (1)
- 2015年三月 (2)
- 2015年二月 (1)
- 2015年一月 (4)
- 2014年十二月 (2)
- 2014年十一月 (2)
- 2014年十月 (5)
- 2014年九月 (8)
- 2014年八月 (11)
- 2014年七月 (17)
- 2014年六月 (7)
- 2014年五月 (15)
- 2014年四月 (16)
- 2014年三月 (14)
- 2014年二月 (5)
- 2013年十二月 (5)
- 2013年十一月 (3)
- 2013年十月 (13)
- 2013年九月 (13)
- 2013年八月 (13)
- 2013年七月 (9)
- 2013年六月 (8)
- 2013年五月 (1)
- 2013年三月 (3)
- 2013年一月 (1)
- 2012年十一月 (1)
- 2012年九月 (12)
- 2012年八月 (3)
- 2011年二月 (1)
- 2009年三月 (1)
- 2009年二月 (1)
- 2008年十一月 (1)
- 2008年六月 (1)
- 2008年四月 (1)
- 2008年三月 (1)
通过/proc/stat文件信息,java实现计算cpu使用率
/proc/stat 文件内容:
[root@Shentar ~]# cat /proc/stat
cpu 602 0 2164 11445 2294 0 17 0 0
cpu0 306 0 1232 4553 2125 0 15 0 0
cpu1 295 0 932 6891 169 0 1 0 0
intr 7110 269 7 0 1 1 0 5 0 1 0 0 0 91 0 0 106 0 6521 0 108 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 38984
btime 1368275792
processes 2713
procs_running 1
procs_blocked 0
[root@Shentar ~]#
第一行的数值表示的是CPU总的使用情况,所以我们只要用第一行的数字计算就可以了。下表解析第一行各数值的含义:
参数 解析(单位:jiffies)
(jiffies是内核中的一个全局变量,用来记录自系统启动一来产生的节拍数,在linux中,一个节拍大致可理解为操作系统进程调度的最小时间片,不同linux内核可能值有不同,通常在1ms到10ms之间)
user (38082) 从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含 nice值为负进程。
nice (627) 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间
system (27594) 从系统启动开始累计到当前时刻,处于核心态的运行时间
idle (893908) 从系统启动开始累计到当前时刻,除IO等待时间以外的其它等待时间iowait (12256) 从系统启动开始累计到当前时刻,IO等待时间(since 2.5.41)
irq (581) 从系统启动开始累计到当前时刻,硬中断时间(since 2.6.0-test4)
softirq (895) 从系统启动开始累计到当前时刻,软中断时间(since 2.6.0-test4)stealstolen(0) which is the time spent in other operating systems when running in a virtualized environment(since 2.6.11)
guest(0) which is the time spent running a virtual CPU for guest operating systems under the control of the Linux kernel(since 2.6.24)
结论:总的cpu时间totalCpuTime = user + nice + system + idle + iowait + irq + softirq + stealstolen + guest
计算时,采样两个时间点的数据,对于时间点1,记录总的cpu时间total1,记录空闲时间idle1,对于时间2,同样记录total2和idle2。
菜谱使用率为:cpuusage = 1 – (idle2 – idle1) / (total2 – total1)
注意,如果时间点1和时间点2间隔足够小(小于10ms),则可能出现total2 – total1为0,这样cpu使用率应该为0,而不是采用除法计算。
java代码如下:
CPUUsage.java
package com;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class CPUUsage
{
private static final String procPath = File.separator + "proc" + File.separator + "stat";
public static void main(String[] args)
{
CPUTime startTime = new CPUTime();
CPUTime endTime = new CPUTime();
getcpuTime(startTime);
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
getcpuTime(endTime);
double cpuUsage = 0;
long totalTime = endTime.getTotalTime() - startTime.getTotalTime();
if (totalTime == 0)
{
cpuUsage = 0;
}
else
{
cpuUsage = 1 - (((double) (endTime.getIdleTime() - startTime.getIdleTime())) / totalTime);
}
System.out.println("the cpu usage is: " + cpuUsage * 100 + "%");
}
private static void getcpuTime(CPUTime t)
{
BufferedReader fr = null;
try
{
fr = new BufferedReader(new FileReader(new File(procPath)));
String oneLine = null;
while ((oneLine = fr.readLine()) != null)
{
if (oneLine.startsWith("cpu "))
{
String[] vals = oneLine.substring(4).split(" ");
if (vals.length != 10)
{
System.err.println("read an error line string!");
}
else
{
t.setTotalTime(Long.parseLong(vals[1]) + Long.parseLong(vals[2]) + Long.parseLong(vals[3])
+ Long.parseLong(vals[4]) + Long.parseLong(vals[5]) + Long.parseLong(vals[6])
+ Long.parseLong(vals[7]) + Long.parseLong(vals[8]) + Long.parseLong(vals[9]));
t.setIdleTime(Long.parseLong(vals[4]));
break;
}
}
}
}
catch (NumberFormatException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
if (fr != null)
{
try
{
fr.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
}
CPUTime.java
package com;
public class CPUTime
{
private long totalTime;
private long idleTime;
public CPUTime()
{
totalTime = 0;
idleTime = 0;
}
public long getTotalTime()
{
return totalTime;
}
public void setTotalTime(long totalTime)
{
this.totalTime = totalTime;
}
public long getIdleTime()
{
return idleTime;
}
public void setIdleTime(long idleTime)
{
this.idleTime = idleTime;
}
}