一、cpu性能指标

1  cpu使用率

1.1  用户cpu使用率:包括用户态cpu使用率(user)和低优先级用户态cpu使用率(nice),表示cpu在用户态运行的时间百分比。用户cpu使用率高,

通常说明应用程序笔记繁忙。

1.2  系统cpu使用率:表示cpu在内核态运行的时间百分比(不包括中断),系统cpu使用率高说明内核比较繁忙。

1.3  等待I/O的cpu使用率:通常也称为iowait,表示等待I/O的时间百分比。iowait高,通常说明系统与硬件设备的I/O交互时间比较长。

1.4  软中断和硬中断的cpu使用率:分别表示内核调用软中断、硬中断处理程序的四件百分比,他们的使用率高,通常说明系统发生了大量的中断。

1.5  虚拟化环境中用到的窃取cpu使用率(steal)和客户cpu使用率(guest),分别表示被其他虚拟机占用的cpu时间百分比,和运行客户虚拟机的cpu时间百分比。

2  平均负载:也就是系统平均活跃进程数。理想情况,平均负载等于逻辑cpu个数,这表示每个cpu都恰好被充分使用。如果平均负载大于逻辑cpu的个数,就表示负载比较重了。

3  上下文切换:本身是保证linux正常运行的一项核心功能。但过多的上下文切换,会将原本运行的cpu时间,消耗在寄存器、内核栈以及虚拟内存数据保存和恢复上,缩短进程

真正运行的时间,成为性能瓶颈。

4  cpu缓存命中率:cpu的发展速度远远高于内存的发展速度,cpu的处理速度就比内存的访问速度快得多。这样,cpu在访问内存的时候,免不了要等待内存的相应。为了协调这

两者的巨大性能差距,cpu缓存(通常是多级缓存)就出现了:

spark on yarn cpu使用率 cpu使用率分析_缓存

cpu缓存的速度介于cpu和内存之间,缓存是热点的内存数据。根据不断增长的热点数据,这些缓存按照大小不同分为L1、L2、L3等三级缓存,其中L1和L2常用在

单核中,L3则用在多核中。

从L1到L3,三级缓存的大小依次增大,相应的性能一次降低(比内存还是好很多)。而他们的命中率,衡量的是cpu缓存的复用情况,命中率越高,则表示性能越好。

便于理解做了如下热图: 

spark on yarn cpu使用率 cpu使用率分析_用户态_02

 二  性能分析工具

1  平均负载:uptime查看了系统的平均负载,mpstat和pidstat分别观察了每个cpu和每个进程的cpu使用情况,进而找到导致平均负载升高的进程,压测工具stress。

2  上下文切换:vmstat查看系统上下文切换次数和中断次数,pidstat观察进程的自愿上下文切换和非自愿上下文切换;最后通过pidstat观察进程的上下文切换,找出

上下文切换次数增多的根源,压测工具sysbench。

spark on yarn cpu使用率 cpu使用率分析_缓存_03

三  快速定位分析:

实际分析我们可以按照上诉方法进行,但较为盲目,为便于快速定位问题,一般都借助于以下命令:top、vmstat、pidstat,原理图见下:

spark on yarn cpu使用率 cpu使用率分析_缓存_04

spark on yarn cpu使用率 cpu使用率分析_缓存_05

--top:可以得到各种cpu的使用情况、僵尸进程、平均负载等信息。

--vmstat:上下文切换次数、中断次数、运行状态、不可中断状态的进程数。

--pidstat:进程的用户cpu使用率、系统cpu使用率、自愿上下文切换、非自愿上下文切换、

上面三个工具的输出信息相互关联。

四  perf、strace、execsnoop工具的使用:

这三个工具一般结合具体事例、具体场景使用,基本命令自行百度,后续遇到具体的场景,会将具体用法补录在此。