引言
- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
说完了cpu使用的概念之后,我们来了解一下查看 CPU 使用率的工具,我猜你肯定熟悉top和ps,的确,top 和 ps 是最常用的性能分析工具,就让我们了解一下吧。
top工具
该工具显示了系统总体的 CPU 和内存使用情况,以及各个进程的资源使用情况。top下的显示如下所示:
%cpu 代表系统的 CPU 使用率,不过这里显示的是总体cpu的平均值,我们可以按1查看每个cpu,我们来看一下:
这些数据名称都被缩写了,比如:us就是用户空间,sy代表系统内核,ni是低优先级的进程等等,但这样还是不够好看,我们可以借助pidstat更细分一下:
下列的数据分别表示:
- 用户态 CPU 使用率 (%usr);
- 内核态 CPU 使用率(%system);
- 运行虚拟机 CPU 使用率(%guest);
- 等待 CPU 使用率(%wait);
- 以及总的 CPU 使用率(%CPU)。
pref工具
很明显,在排查问题时,只定位到具体哪个进程使用cpu过高是没办法解决问题的,我们需要借助更细粒度的分析工具帮我们找到有问题的函数,preftop就可以帮助我们分析,我们来运行一下:
蓝色部分有三个数据:分别是采样数、事件数和事件数量perf 总共采集了1000 个 CPU 时钟事件,而总事件数则为 258957402,然后有4列数据,分别表示如下:
- 第一列 Overhead ,是该符号的性能事件在所有采样中的比例,用百分比来表示。
- 第二列 Shared ,是该函数或指令所在的动态共享对象(Dynamic Shared Object),如内核、进程名、动态链接库名、内核模块名等。
- 第三列 Object ,是动态共享对象的类型。比如 [.] 表示用户空间的可执行程序、或者动态链接库,而 [k] 则表示内核空间。
- 最后一列 Symbol 是符号名,也就是函数名。当函数名未知时,用十六进制的地址来表示。
我们可以看出占比最高的是内核,因此说明系统并没有Cpu的性能问题。