在 Linux 系统中的 /proc/stat
文件中存储了CPU 活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。不同内核版本中该文件的格式可能不大一致,以下通过实例来说明数据该文件中各字段的含义。
$ cat /proc/stat
cpu 1594121 406 1239990 396233700 162305 0 3641 0 0 0
cpu0 761327 194 604191 198151599 83873 0 1789 0 0 0
cpu1 832793 211 635798 198082101 78432 0 1852 0 0 0
intr 985115307 38 10 0 0 58 0 3 0 0 0 0 36 15 0 0 0 0 0 0 0 0 0 0 0 0 2473171 42 0 862348 0 57 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 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 0
ctxt 1896726060
btime 1592793001
processes 63407
procs_running 1
procs_blocked 0
softirq 191297272 3 90057502 70 10686595 0 0 34 51485476 0 39067592
第一行的数值表示的是CPU总的使用情况,所以我们只要用第一行的数字计算就可以了。下表解析第一行各数值的含义:
参数 | 解析(单位:jiffies) | 当前值 |
---|---|---|
name | 设备名。 | cpu |
user | 从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含 nice值为负进程。 | 1594121 |
nice | 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间。 | 406 |
system | 从系统启动开始累计到当前时刻,处于核心态的运行时间。 | 1239990 |
idle | 从系统启动开始累计到当前时刻,除IO等待时间以外的其它等待时间。 | 396233700 |
iowait | 从系统启动开始累计到当前时刻,IO等待时间。 | 162305 |
irq | 从系统启动开始累计到当前时刻,硬中断时间。 | 0 |
softirq | 从系统启动开始累计到当前时刻,软中断时间。 | 3641 |
stealstolen | 从系统启动开始累积到当前时刻,在虚拟环境运行时花费在其他操作系统的时间。 | 0 |
guest | 从系统启动开始累积到当前时刻,在Linux内核控制下的操作系统虚拟cpu花费的时间。 | 0 |
guest_nice | 从系统启动开始累积到当前时刻,在Linux内核控制下的操作系统虚拟cpu花费在nice进程上的时间。 | 0 |
注:jiffies是内核中的一个全局变量,用来记录自系统启动一来产生的节拍数,在
linux
中,一个节拍大致可理解为操作系统进程调度的最小时间片,不同linux
内核可能值有不同,通常在1ms
到10ms
之间
totalCpuTime
= user
+ nice
+ system
+ idle
+ iowait
+ irq
+ softirq
+ stealstolen
+ guest
+ guest_nice
cpu使用率计算:
us: User time -> %us = (User + Nice) / totalCpuTime * 100%
sy: System time -> %sy = (System + Hard Irq + SoftIRQ) / totalCpuTime
ni: Nick time -> %ni = (Nice) / totalCpuTime * 100%
id: Idle time -> %id = (Idle) / totalCpuTime * 100%
wa: Waiting time -> %wa = (Waiting) / totalCputTime * 100%
hi: Hard Irq time -> %hi = (Hard Irq) / totalCpuTime * 100%
si: SoftIrq time -> %si = (SoftRQ) / totalCpuTime * 100%
st: Steal time -> %st = (Steal) / totalCputTime * 100%
Author: Frytea
Title: 计算 Linux CPU 利用率
Link: https://cloud.tencent.com/developer/article/1663134
Copyright: This work by TL-Song is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.