CPU使用率的几个重要指标

2019-09-17  本文已影响0人  SnailFast

指标

        user(通常缩写为us),代表用户态CPU时间。注意,它不包括下面的nice时间,但包括了guest时间。

        nice(通常缩写为ni),代表低优先级用户态CPU时间,也就是进程nice值被调整为1-19之间的CPU时间。

        system(通常缩写为sys),代表内核态CPU时间。

        idle(通常缩写为id),代表空闲时间。注意,它不包括I/O等待时间(iowait)。

        iowait(通常缩写为wa),代表CPU空闲担仍有未完成的I/O请求的时间

        irq(通常缩写为hi),代表处理硬中断的CPU时间。

        softirq(通常缩写为si),代表处理软中断的CPU时间。

        steal(通常缩写为st),代表当系统运行在虚拟机中的时候,被其他虚拟机占用的CPU时间。

        guest(通常缩写为guest),代表通过虚拟化运行其他操作系统的时间,也就是运行虚拟机的CPU时间。

工具Perf

            perf top

perf top

        输出结果中,第一行包含三个数据,分别是采样数(Samples)、事件类型(event)和事件总数量(Event count)。比如这个例子中,perf 总共采集了 833 个 CPU 时钟事件,而总事件数则为 97742399。另外,采样数需要我们特别注意。如果采样数过少(比如只有十几个),那下面的排序和百分比就没什么实际参考价值了。

        再往下看是一个表格式样的数据,每一行包含四列,分别是:

        第一列 Overhead ,是该符号的性能事件在所有采样中的比例,用百分比来表示。

        第二列 Shared ,是该函数或指令所在的动态共享对象(Dynamic Shared Object),如内核、进程名、动态链接库名、内核模块名等。

        第三列 Object ,是动态共享对象的类型。比如 [.] 表示用户空间的可执行程序、或者动态链接库,而 [k] 则表示内核空间。

        最后一列 Symbol 是符号名,也就是函数名。当函数名未知时,用十六进制的地址来表示。

        还是以上面的输出为例,我们可以看到,占用 CPU 时钟最多的是 perf 工具自身,不过它的比例也只有 7.28%,说明系统并没有 CPU 性能问题。

        perf  record 和 perf  report

perf  record 和 perf  report

        在实际使用中,我们还经常为 perf top 和 perf record 加上 -g 参数,开启函数调用关系的采样,方便我们根据调用链来分析性能问题。例如观察某个具体的进程:perf top -g -p 21515。

上一篇 下一篇

猜你喜欢

热点阅读