cpu瓶颈分析
一、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缓存(通常是多级缓存)就出现了:
cpu缓存的速度介于cpu和内存之间,缓存是热点的内存数据。根据不断增长的热点数据,这些缓存按照大小不同分为L1、L2、L3等三级缓存,其中L1和L2常用在
单核中,L3则用在多核中。
从L1到L3,三级缓存的大小依次增大,相应的性能一次降低(比内存还是好很多)。而他们的命中率,衡量的是cpu缓存的复用情况,命中率越高,则表示性能越好。
便于理解做了如下热图:
二 性能分析工具
1 平均负载:uptime查看了系统的平均负载,mpstat和pidstat分别观察了每个cpu和每个进程的cpu使用情况,进而找到导致平均负载升高的进程,压测工具stress。
2 上下文切换:vmstat查看系统上下文切换次数和中断次数,pidstat观察进程的自愿上下文切换和非自愿上下文切换;最后通过pidstat观察进程的上下文切换,找出
上下文切换次数增多的根源,压测工具sysbench。
三 快速定位分析:
实际分析我们可以按照上诉方法进行,但较为盲目,为便于快速定位问题,一般都借助于以下命令:top、vmstat、pidstat,原理图见下:
--top:可以得到各种cpu的使用情况、僵尸进程、平均负载等信息。
--vmstat:上下文切换次数、中断次数、运行状态、不可中断状态的进程数。
--pidstat:进程的用户cpu使用率、系统cpu使用率、自愿上下文切换、非自愿上下文切换、
上面三个工具的输出信息相互关联。
四 perf、strace、execsnoop工具的使用:
这三个工具一般结合具体事例、具体场景使用,基本命令自行百度,后续遇到具体的场景,会将具体用法补录在此。