CPU使用率
- user(通常缩写为 us),代表
用户态 CPU 时间
。注意,它不包括下面的 nice 时间,但包括了 guest 时间。 - nice(通常缩写为 ni),代表
低优先级用户态 CPU 时间,也就是进程的 nice 值被调整为 1-19 之间时的 CPU 时间
。这里注意,nice 可取值范围是 -20 到 19,数值越大,优先级反而越低。 - system(通常缩写为 sys),代表
内核态 CPU 时间
。 - idle(通常缩写为 id),代表
空闲时间
。注意,它不包括等待 I/O 的时间(iowait)。 - iowait(通常缩写为 wa),代表
等待 I/O 的 CPU 时间
。 - irq(通常缩写为 hi),代表
处理硬中断的 CPU 时间
。 - softirq(通常缩写为 si),代表
处理软中断的 CPU 时间
。 - steal(通常缩写为 st),代表
当系统运行在虚拟机中的时候,被其他虚拟机占用的 CPU 时间
。 - guest(通常缩写为 guest),代表
通过虚拟化运行其他操作系统的时间,也就是运行虚拟机的 CPU 时间
。 - guest_nice(通常缩写为 gnice),代表
以低优先级运行虚拟机的时间
。
每个进程都有一个 %CPU 列
,表示进程的 CPU 使用率。它是用户态和内核态 CPU 使用率的总和,包括进程用户空间使用的 CPU、通过系统调用执行的内核空间 CPU 、以及在就绪队列等待运行的 CPU。在虚拟化环境中,它还包括了运行虚拟机占用的 CPU。
CPU 使用率,就是除了空闲时间外的其他时间占总 CPU 时间的百分比,性能分析工具给出的都是间隔一段时间的平均 CPU 使用率,所以要注意间隔时间的设置
perf
通过上述方法很容易找到cpu使用率高的进程,但是具体是进程哪一行代码,则需要新的工具,用perf,这个后面再更新,省的误人子弟
案例
- CPU达到100%时候,找到目标进程,然后perf分析代码,确定问题行
- CPU使用率很高,但是找不到目标进程,一是可能短进程,二是可能进程不停崩溃重启
- 系统出现大量不可中断进程和僵尸进程,
不可中断进程,就去查看进程IO部分代码,观察代码是读 or 写 的问题dstat -cydsgmnplt 查看系统IO情况 pidstat -d 1 10 perf record -g
僵尸进程,找到父进程后,找到其wait或者waitpid代码是否存在,一般僵尸进程是其父进程没有进行回收导致的