CPU是计算机的大脑,担负起有条不紊地运行整个机器的职责。因此CPU的各项性能指标值得我们去着重关注。那么哪些信息指标,可以反应出机器当前的运行状态呢?常用的查看CPU信息的命令显示的那一堆参数又分别表示什么呢?以下是一些常用的CPU相关的命令和参数汇总
常用的一些命令
- top
- mpstat
- vmstat
- perf
- pidstat
1. top
top 命令是用来动态显示当前机器上的所有进程的。类似于windows下任务管理器的进程页.
如上图所示,相应的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开始递增), 也有ON
和ALL
两个固定选项,分别对应查看在线运行的CPU和所有的CPU.-I
选项主要是用来报告处理器的中断情况的。-u
选项是用来报告CPU利用率的统计情况的,具体的参数情况及其含义与用 top命令查看时无二致。
例如以下命令为 每隔1秒在终端打印输出全部CPU的统计情况
1 | mpstat -P ALL -u 1 |
3. vmstat
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 以后内置的性能分析工具。它以性能事件采样为基础,不仅可以分析系统的各种事件和内核性能,还可以用来分析指定应用程序的性能问题。
常见用法为:
1 | perf record -g # -g 开启调用关系的采样,方便我们根据调用链来分析性能问题 |
上述命令运行一段时间(比方说15秒)之后按Ctrl+C 终止操作,会在当前操作目录下生成采样数据文件 perf.data
之后通过命令 perf record
可以打开数据文件,看到其中CPU使用率最高的事件,从而帮助我们分析问题的所在。
5. pidstat
pidstat 命令主要是用来帮助我们观察进程上下文切换情况的。这其中有两个跟CPU紧密相关的参数指标,即cswch
和 nvcswch
. 分别表示每秒自愿上下文切换次数和每秒非自愿上下文切换次数。而所谓的 自愿上下文切换(voluntary context switches)
指的是进程无法获取所需资源而导致的上下文切换,比如说,I/O等待,内存资源不足等情况,就会发生资源上下文切换。非自愿上下文切换(non voluntary context switches)
则是指进程由于时间片已到等原因,进行进程调度时让出CPU进而发生的CPU上下文切换。这种情况是被系统强制调度的,因而称为非自愿上下文切换。当大量的进程在争抢CPU时,就容易发生CPU的非自愿上下文切换,因此这也是一个在进行CPU性能问题排查时值得重点关注的地方。
本笔记摘抄内容来自于极客时间专栏《Linux性能优化实战》