性能分析(6)- 如何迅速分析出系统 CPU 的瓶颈在哪里

简介: 性能分析(6)- 如何迅速分析出系统 CPU 的瓶颈在哪里

性能分析小案例系列,可以通过下面链接查看哦

https://www.cnblogs.com/poloyy/category/1814570.html

 

前言


  • 在做性能测试时,我们会需要对 Linux 系统的性能指标进行分析
  • 这一篇就来讲下 CPU 性能指标的一个整体分析思路流程
  • 总结出一个“又快又准”的瓶颈定位套路,在不同场景下,指标工具怎么选,性能瓶颈怎么找

 

CPU 性能指标


一共有四个需要掌握了解的性能指标

image.png

CPU 使用率

再次总结

  • 最常见的一个性能指标
  • 描述了非空闲时间占总 CPU 时间的百分比
  • 根据 CPU 上运行任务的不同,又被分为:用户 CPU、系统 CPU、等待 I/O CPU、软中断、硬中断

 

用户 CPU 使用率

  • 表示 CPU 在用户态运行的时间百分比
  • 包括:用户态的 CPU 使用率(user)和低优先级的用户态 CPU 使用率(nice)
  • 用户 CPU 使用率高,说明有应用程序比较繁忙

 

系统 CPU 使用率

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

 

等待 I/O 的 CPU 使用率

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

 

软中断和硬中断的 CPU 使用率

  • 分别表示内核调用软中断处理程序、硬中断处理程序的时间百分比
  • 它们的使用率高,通常说明系统发生了大量的中断

 

虚拟化环境

  • 窃取 CPU 使用率(steal):被其他虚拟机占用的 CPU 时间百分比
  • 客户 CPU 使 用率(guest):运行客户虚拟机的 CPU 时间百分比

 

平均负载

平均活跃进程数

 

理想情况

  • 平均负载等于逻辑 CPU 个数,这表示每个 CPU 都恰好被充分利用
  • 如果平均负载大于逻辑 CPU 个数,就表示负载比较重了

 

进程上下文切换

两种类型

  • 自愿上下文切换:无法获取资源而导致
  • 非自愿上下文切换:被系统强制调度而导致

 

重点知识

  • CPU 上下文切换本身是保证 Linux 正常运行的一项核心功能
  • 过多的上下文切换,会将运行进程的 CPU 时间,消耗在寄存器、内核栈、虚拟内存等数据的保存和恢复上
  • 最终,缩短进程真正运行的时间,成为性能瓶颈

 

CPU 缓存命中率

为什么会有缓存命中率

  • 由于 CPU 发展的速度远快于内存的发展,CPU 的处理速度就比内存的访问速度快得多
  • 这样,CPU 在访问内存的时候,免不了要等待内存的响应
  • 为了协调这两者巨大的性能差距,CPU 缓存(通常是多级缓存)就出现了

image.png

  • 就像上面这张图显示的,CPU 缓存的速度介于 CPU 和内存之间,缓存的是热点的内存数据
  • 根据不断增长的热点数据,这些缓存按照大小不同分为 L1、L2、L3 等三级缓存,其中 L1 和 L2 常用在单核中, L3 则用在多核中
  • 从 L1 到 L3,三级缓存的大小依次增大,相应的,性能依次降低(当然比内存还是好得 多)
  • 而它们的命中率,衡量的是 CPU 缓存的复用情况,命中率越高,则表示性能越好

 

CPU 性能工具


炒鸡重点

把性能指标和性能工具联系起来,下面个将从两个维度来讲这个点

 

第一个维度:从 CPU 的性能指标出发

  • 也就是说,当你要查看某个性能指标时,要清楚知道哪些工具可以做到
  • 总结:哪个工具可以查看哪些指标

image.png

第二个维度:从工具触发

要明确知道这个工具能提供哪些指标

image.png

重点!重点!重点!来了!

 

如何快速分析 CPU 的性能瓶颈

在实际生产环境中,我们通常都希望尽可能定位系统的瓶颈,然后尽可能优化性能,也就是要又快又准地解决性能问题

 

认知

  • 虽然 CPU 的性能指标比较多,但要知道,既然都是描述系统的 CPU 性能,它们就不会是完全孤立的,很多指标间都有一定的关联
  • 想弄清楚性能指标的关联性,就要通晓每种性能指标的工作原理

 

举个栗子

  • 用户 CPU 使用率(us)高,应该去排查进程的用户态而不是内核态,因为用户 CPU 使用率反映的就是用户态的 CPU 使用情况
  • 而内核态的 CPU 使用情况只会反映到系统 CPU 使用率(sy)上

 

CPU 使用率高的场景,如何进行一系列的性能分析

image.png

列出了 top、vmstat 和 pidstat 分别提供的重要的 CPU 指标,并用虚线表示关联关系,对应出了性能分析下一步的方向

下面举些小栗子

 

栗子一

  1. top看到用户态 CPU 使用率偏高
  2. 可以根据 pidstat的输出进一步观察是否是某个进程导致的问题
  3. 找出 CPU 使用率偏高的进程之后就要用进程分析工具来分析进程的行为
  4. 比如使用 strace分析系统调用情况,perf分析调用链中各级函数的执行情况

 

栗子二

  1. top看到平均负载升高
  2. 通过 vmstat查看 R 状态和 B 状态的进程数,是否有数量上的异常
  3. 如果不可中断状态的进程数过多,需要做 I/O 的分析,可以通过 dstatsar工具来分析 I/O
  4. 如果是运行状态的进程数过多,可以通过 pidstat确认处于运行状态的进程,然后用进程分析工具做进一步分析

 

栗子三

  1. top看到软中断 CPU 使用率(si)偏高,进程列表能看到软中断进程 CPU 使用率也偏高
  2. 可以根据读取 /proc/softirqs 查看软中断类型和变化频率
  3. 如果是网络相关软中断导致的问题,可以进一步通过网络分析工具 sartcpdump来分析
相关文章
|
2月前
|
Windows
【Azure App Service】对App Service中CPU指标数据中系统占用部分(System CPU)的解释
在Azure App Service中,CPU占比可在App Service Plan级别查看整个实例的资源使用情况。具体应用中仅能查看CPU时间,需通过公式【CPU Time / (CPU核数 * 60)】估算占比。CPU百分比适用于可横向扩展的计划(Basic、Standard、Premium),而CPU时间适用于Free或Shared计划。然而,CPU Percentage包含所有应用及系统占用的CPU,高CPU指标可能由系统而非应用请求引起。详细分析每个进程的CPU占用需抓取Windows Performance Trace数据。
102 40
|
2月前
|
缓存 安全 Linux
Linux系统查看操作系统版本信息、CPU信息、模块信息
在Linux系统中,常用命令可帮助用户查看操作系统版本、CPU信息和模块信息
138 23
|
3月前
|
存储 人工智能 vr&ar
转载:【AI系统】CPU 基础
CPU,即中央处理器,是计算机的核心部件,负责执行指令和控制所有组件。本文从CPU的发展史入手,介绍了从ENIAC到现代CPU的演变,重点讲述了冯·诺依曼架构的形成及其对CPU设计的影响。文章还详细解析了CPU的基本构成,包括算术逻辑单元(ALU)、存储单元(MU)和控制单元(CU),以及它们如何协同工作完成指令的取指、解码、执行和写回过程。此外,文章探讨了CPU的局限性及并行处理架构的引入。
转载:【AI系统】CPU 基础
|
3月前
|
人工智能 缓存 并行计算
转载:【AI系统】CPU 计算本质
本文深入探讨了CPU计算性能,分析了算力敏感度及技术趋势对CPU性能的影响。文章通过具体数据和实例,讲解了CPU算力的计算方法、算力与数据加载之间的平衡,以及如何通过算力敏感度分析优化计算系统性能。同时,文章还考察了服务器、GPU和超级计算机等平台的性能发展,揭示了这些变化如何塑造我们对CPU性能的理解和期待。
转载:【AI系统】CPU 计算本质
|
4月前
|
存储 人工智能 编译器
【AI系统】CPU 指令集架构
本文介绍了指令集架构(ISA)的基本概念,探讨了CISC与RISC两种主要的指令集架构设计思路,分析了它们的优缺点及应用场景。文章还简述了ISA的历史发展,包括x86、ARM、MIPS、Alpha和RISC-V等常见架构的特点。最后,文章讨论了CPU的并行处理架构,如SISD、SIMD、MISD、MIMD和SIMT,并概述了这些架构在服务器、PC及嵌入式领域的应用情况。
271 5
|
4月前
|
人工智能 缓存 并行计算
【AI系统】CPU 计算本质
本文深入探讨了CPU计算性能,分析了算力敏感度及技术趋势对CPU性能的影响。文章通过具体数据和实例,解释了算力计算方法、数据加载与计算的平衡点,以及如何通过算力敏感度分析优化性能瓶颈。同时,文章还讨论了服务器、GPU和超级计算机等不同计算平台的性能发展趋势,强调了优化数据传输速率和加载策略的重要性。
129 4
|
4月前
|
缓存 人工智能 算法
【AI系统】CPU 计算时延
CPU(中央处理器)是计算机系统的核心,其计算时延(从指令发出到完成所需时间)对系统性能至关重要。本文探讨了CPU计算时延的组成,包括指令提取、解码、执行、存储器访问及写回时延,以及影响时延的因素,如时钟频率、流水线技术、并行处理、缓存命中率和内存带宽。通过优化这些方面,可以有效降低计算时延,提升系统性能。文中还通过具体示例解析了时延产生的原因,强调了内存时延对计算速度的关键影响。
69 0
|
4月前
|
缓存 监控 Linux
Linux性能分析利器:全面掌握perf工具
【10月更文挑战第18天】 在Linux系统中,性能分析是确保软件运行效率的关键步骤。`perf`工具,作为Linux内核自带的性能分析工具,为开发者提供了强大的性能监控和分析能力。本文将全面介绍`perf`工具的使用,帮助你成为性能优化的高手。
291 1
|
4月前
|
缓存 监控 Linux
掌握Linux性能分析:深入探索perf工具
【10月更文挑战第26天】
183 1
|
6月前
|
SQL 缓存 关系型数据库
MySQL高级篇——性能分析工具
MySQL的慢查询日志,用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long-query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为 10,意思是运行10秒以上(不含10秒)的语句,认为是超出了我们的最大忍耐时间值。它的主要作用是,帮助我们发现那些执行时间特别长的 SOL 查询,并且有针对性地进行优化,从而提高系统的整体效率。当我们的数据库服务器发生阻塞、运行变慢的时候,检查一下慢查询日志,找到那些慢查询,对解决问题很有帮助。
MySQL高级篇——性能分析工具

热门文章

最新文章

相关实验场景

更多