avatar

目录
Linux下常用的查看CPU指标命令汇总笔记

CPU是计算机的大脑,担负起有条不紊地运行整个机器的职责。因此CPU的各项性能指标值得我们去着重关注。那么哪些信息指标,可以反应出机器当前的运行状态呢?常用的查看CPU信息的命令显示的那一堆参数又分别表示什么呢?以下是一些常用的CPU相关的命令和参数汇总

常用的一些命令

  • top
  • mpstat
  • vmstat
  • perf
  • pidstat

1. top

top 命令是用来动态显示当前机器上的所有进程的。类似于windows下任务管理器的进程页.

image

如上图所示,相应的CPU指标参数分别的含义罗列如下:

  • us(user),代表用户态 CPU 时间。不包括下面的 nice 时间,但包括了 guest 时间。
  • ni(nice),代表低优先级用户态 CPU 时间,也就是进程的 nice 值被调整为 1-19 之间时的 CPU 时间。这里注意,nice 可取值范围是 -20 到 19,数值越大,优先级越低。
  • sy(system),代表内核态 CPU 时间。
  • id(idle),代表空闲时间。注意,它不包括等待 I/O 的时间(iowait)。
  • wa(iowait),代表等待 I/O 的 CPU 时间。
  • hi(irq),代表处理硬中断的 CPU 时间。
  • si(softirq),代表处理软中断的 CPU 时间。
  • st(steal),代表当系统运行在虚拟机中的时候,被其他虚拟机占用的 CPU 时间。

2. mpstat

mpstat 命令是用来采样报告CPU的运行统计情况的。

mpstat 命令通常搭配-I -P-u 选项执行。

其中

  • -P 选项指定查看第几核CPU(针对多核CPU而言,编号从0开始递增), 也有ONALL 两个固定选项,分别对应查看在线运行的CPU和所有的CPU.

  • -I 选项主要是用来报告处理器的中断情况的。

  • -u 选项是用来报告CPU利用率的统计情况的,具体的参数情况及其含义与用 top命令查看时无二致。

例如以下命令为 每隔1秒在终端打印输出全部CPU的统计情况

bash
1
mpstat -P ALL -u 1

3. vmstat

image

vmstat 是一个常用的系统性能分析工具,主要用来分析系统的内存使用情况,也常用来分析 CPU 上下文切换和中断的次数。这其中跟CPU相关的参数如下:

  • cs(context switch)是每秒上下文切换的次数。
  • in(interrupt)则是每秒中断的次数。
  • r(Running or Runnable)是就绪队列的长度,也就是正在运行和等待 CPU 的进程数。
  • b(Blocked)则是处于不可中断睡眠状态的进程数。

需要特别指出的是,vmstat 给出的统计信息是总体的上下文切换情况,如果要具体到某个进程,则需要额外使用 pidstat 这个命令

4. perf

perf 这个命令工具主要是用来帮助我们进行CPU事件分析的。它是 Linux 2.6.31 以后内置的性能分析工具。它以性能事件采样为基础,不仅可以分析系统的各种事件和内核性能,还可以用来分析指定应用程序的性能问题。
常见用法为:

bash
1
perf record -g  # -g 开启调用关系的采样,方便我们根据调用链来分析性能问题

上述命令运行一段时间(比方说15秒)之后按Ctrl+C 终止操作,会在当前操作目录下生成采样数据文件 perf.data

之后通过命令 perf record 可以打开数据文件,看到其中CPU使用率最高的事件,从而帮助我们分析问题的所在。

5. pidstat

pidstat 命令主要是用来帮助我们观察进程上下文切换情况的。这其中有两个跟CPU紧密相关的参数指标,即cswchnvcswch. 分别表示每秒自愿上下文切换次数和每秒非自愿上下文切换次数。而所谓的 自愿上下文切换(voluntary context switches) 指的是进程无法获取所需资源而导致的上下文切换,比如说,I/O等待,内存资源不足等情况,就会发生资源上下文切换。非自愿上下文切换(non voluntary context switches)则是指进程由于时间片已到等原因,进行进程调度时让出CPU进而发生的CPU上下文切换。这种情况是被系统强制调度的,因而称为非自愿上下文切换。当大量的进程在争抢CPU时,就容易发生CPU的非自愿上下文切换,因此这也是一个在进行CPU性能问题排查时值得重点关注的地方。


本笔记摘抄内容来自于极客时间专栏《Linux性能优化实战》

文章作者: JanGin
文章链接: http://jangin.github.io/2021/03/28/notes-about-shell-commands-cpuinfos-related-on-linux/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 JanGin's BLOG

评论