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

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

浙公网安备 33010602011771号