以上数据的单位是jiffies, jiffies是内核中的一个全局变量,用来记录自系统启动一来产生的节拍数,在linux中,一个节拍大致可理解为操作系统进程调度的最小时间片,不同linux内核可能值有不同,通常在1ms到10ms之间。
上图所示的第一行数据即为设备所有cpu的运行数据,其含义如下:
user (29048) 从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含 nice值为负进程。
nice (5966) 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间。这里解释下何为nice。
每一人进程都有一个PRI和NI值,可通过ps -l 命令查看。PRI还是比较好理解的,即进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,此值越小进程的优先级别越高。那NI呢?就是我们所要说的nice值了,其表示进程可被执行的优先级的修正数值。如前面所说,PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice。这样,当nice值为负值的时候,那么该程序将会优先级值将变小,即其优先级会变高,则其越快被执行。
system (19488) 从系统启动开始累计到当前时刻,处于核心态的运行时间
idle (8333) 从系统启动开始累计到当前时刻,除IO等待时间以外的其它等待时间
iowait (5811) 从系统启动开始累计到当前时刻,IO等待时间
irq (0) 从系统启动开始累计到当前时刻,硬中断时间
softirq (22) 从系统启动开始累计到当前时刻,软中断时间
stealstolen(0) 在虚拟机环境下运行其他操作系统所花费的时间
guest(0) 运行在访客模式下所花费的时间
guest_nice (0) 运行在访客模式下,nice值为负的进程所占用的CPU时间。
2、总的CPU使用率计算方法:
a、 采样两个足够短的时间间隔的Cpu快照,分别为t1,t2,其中t1、t2均包含(user、nice、system、idle、iowait、irq、softirq、stealstolen、 guest)9个元素;
b、 计算总的cpu时间
把第一次的所有cpu使用情况求和,得到total_t1;
把第二次的所有cpu使用情况求和,得到total_t2;
这个时间间隔内的所有时间片,即totalCpuTime = total_t2 - total_t1 ;
c、计算空闲时间idle
idle对应第四列的数据,用第二次的idle - 第一次的idle即可
idle = idle_t2 – idle_t1
d、计算cpu使用率
cpuUsage = 100 * (total_t2 - total_t1 – (idle_t2 – idle_t1)) / (total_t2 – total_t1)
三、应用相关CPU使用率
1、获取应用相关的CPU使用情况
首先需要通过ps -l 命令查看应用的pid,
然后输入命令:cat /proc/<pid>/stat,可查看应用相关的CPU使用情况
pid(19544) 进程号
S 表示任务状态为Sleep
utime (682) 该任务在用户态运行的时间,单位为jiffies
stime(211) 该任务在核心态运行的时间,单位为jiffies
2、应用相关的CPU使用率计算方法:
同样采样两个足够短的时间间隔的CPU快照,t1,t2
计算总的CPU时间和应用所占的CPU时间。总的CPU时间上面已经介绍过了,
应用进程所占用的CPU时间pcpu=utime + stime,
再除以总的cpu时间,即可得到该进程的cpu占用率了。
pcpuUsage=100*(pcpu_t2 - pcpu_t1)/(total_t2 - total_t1)