获取linux系统CPU实时利用率

在Linux系统中,CPU时间的分配信息保存在/proc/stat文件中,我们就可以从这个文件中读取原始数据,然后计算出最终的CPU利用率的。

 

在Linux系统中,CPU时间的分配信息保存在/proc/stat文件中,我们就可以从这个文件中读取原始数据,然后计算出最终的CPU利用率的。这个文件的一般格式如下所示:

文件的前几行记录了每个CPU核心的在各种状态下分配的时间片(单位是Jiffies,一般为0.01s),这些数据是从CPU加电到当前的累计值。常用的Shell命令以及一些监控软件(例如top等)就是利用/proc/stat里面的这些数据计算CPU利用率的。

        参数          解析(单位:jiffies)
        (jiffies是内核中的一个全局变量,用来记录自系统启动一来产生的节拍数,在linux中,一个节拍大致可理解为操作系统进程调度的最小时间片,不同linux内核可能值有不同,通常在1ms到10ms之间) 

参数的意义:

参数说明
User(1) 从系统启动开始累积到当前时刻,处于用户态的运行时间,不包含nice值为负进程;
Nice(2) 从系统启动开始累积到当前时刻,nice值为负的进程所占用的CPU时间;
System(3) 从系统启动开始累积到当前时刻,处于和心态的运行时间;
Idle(4) 从系统启动开始累积到当前时刻,除IO等待时间外的其他等待时间;
Iowait(5) 从系统启动开始累积到当前时刻,IO等待时间(since 2.5.41);
Irq(6) 从系统启动开始累积到当前时刻,硬中断时间(since 2.6.0-tests4);
Softirq(7) 从系统启动开始累积到当前时刻,软中断时间(since 2.6.0-test5);
Steal(8) Stolen time, which is the time spent in other operating systems when running in a virtualized environment(since 2.6.11);
Guest(9) Time spent running a virtual CPU for guest operating systems under the control of the Linux kernel(since 2.6.24);
guest_nice(10) Time spent running a niced guest (virtual CPU for guest operating systems under the control of the Linux kernel)( since 2.6.24);

 

 

因为/proc/stat中的数值都是从系统启动开始累积到当前时刻的累加值,所以需要在不同时间点t1和t2取值进行比较运算,当两个时间点的间隔较短时,就可以把这个计算结果看做是CPU的即时利用率。
CPU即时利用率(时间间隔1s)计算公式如下:
CPU在t1到t2时间段总的使用时间 = ( user2+ nice2+ system2+ idle2+ iowait2+ irq2+ softirq2) –
( user1+ nice1+ system1+ idle1+ iowait1+ irq1+ softirq1)
CPU在t1到t2时间段空闲使用时间 = (idle2 - idle1)
CPU在t1到t2时间段即时利用率 = 1 - CPU空闲使用时间 / CPU总的使用时间

注:在利用公式进行CPU即时利用率计算时,一定要先判断Total和idle,有时计算出来的idle比Total还要大,出现时间倒流现象,较早的发行版OS内核可能会出现。

 参考文献:http://www.waverley.me/2017/04/02/%E8%8E%B7%E5%8F%96linux%E7%B3%BB%E7%BB%9FCPU%E5%AE%9E%E6%97%B6%E5%88%A9%E7%94%A8%E7%8E%87/

posted @ 2017-08-15 10:17  Cloud2020  阅读(192)  评论(0)    收藏  举报