CPU使用率

cpu使用率是cpu使用情况的统计,以百分比的方式统计

为了维护cpu时间,linxu通过事先定义的节拍率(内核中表示为HZ),触发时间中断,使用全局变量Jiffies记录开机以来的节拍数。每发生一次时间中断Jiffies的值+1

节拍率HZ是内核的可配选项,可以设置为100,250,1000等 可以通过查询/boot/config内核选项来查看它的配置值

zhk@ubuntu:~$ grep 'CONFIG_HZ=' /boot/config-$(uname -r)
CONFIG_HZ=250

用户空间节拍USER_HZ,固定为100

/proc/stat提供的是系统cpu和任务统计信息

zhk@ubuntu:~$ cat /proc/stat |grep ^cpu
cpu  9953 209 6666 78345 1569 0 478 0 0 0
cpu0 4809 41 3438 39398 808 0 127 0 0 0
cpu1 5144 168 3228 38946 761 0 350 0 0 0

第一列cpu编号,其他列表示不同场景下cpu的累加节拍数,单位是user_hz

cpu使用率的重要相关指标

  • user(通常缩写为us),代表用户态CPU时间。注意,它不包括下面的nice时间,但是包括了gust时间
  • nice (通常缩写为ni),代表低优先级用户态cpu时间,也就是进程的nice值被调整为1-19之间的cpu时间,nice的取值范围是-20到19,数值越大,优先级越低
  • system(通常缩写为sys),代表内核态cpu时间
  • idle(通常缩写为id) 空闲时间,不包括等待io的时间(iowait)
  • iowait(通常缩写为wa),代表等待IO的cpu时间
  • irq(通常缩写为hi),代表处理硬中断的cpu时间
  • softirq(通常缩写为si),代表处理软中断的cpu时间
  • steal(通常缩写为st),代表党系统运行在虚拟机中的时候,被其他虚拟机占用的cpu时间
  • guest(通常缩写为guest),代表通过虚拟化运行其他操作系统的时间,也就是运行虚拟机的cpu时间。
  • guest_nice(通常缩写为gnice),代表以低优先级运行虚拟机的时间

为了计算cpu使用率,通过会取间隔一段时间(比如3秒)的两次值,做差

查看cpu使用率

top
默认3秒

pidstat
– 用户态cpu使用率(%usr)
– 内核态cpu使用率(%system)
– 运行虚拟机cpu使用率(%guest)
– 等待cpu使用率(%wait)
– 总的cpu使用率(%CPU)

zhk@ubuntu:~$ #每隔1秒输出一组数据,供输出5组
zhk@ubuntu:~$ pidstat 1 5
Linux 4.15.0-42-generic (ubuntu)    12/20/2018  _x86_64_    (2 CPU)

10:56:45 AM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
10:56:46 AM   103       491    0.00    0.98    0.00    0.00    0.98     1  dbus-daemon
10:56:46 AM   116       563    0.00    0.98    0.00    0.00    0.98     1  avahi-daemon
10:56:46 AM  1000      2063    0.98    0.98    0.00    0.98    1.96     0  Xorg
10:56:46 AM  1000      2180    1.96    0.00    0.00    0.00    1.96     1  gnome-shell
10:56:46 AM  1000      2500    0.00    0.98    0.00    0.00    0.98     1  prlcc
10:56:46 AM  1000      7690    0.00    1.96    0.00    0.00    1.96     0  pidstat


perf top
perf record
perf report

-g表示开启调用关系分析 -p 指定进程号
perf top -g -p pid