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

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

前言

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

CPU 性能指标

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

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 缓存(通常是多级缓存)就出现了

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

CPU 性能工具

炒鸡重点

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

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

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

第二个维度:从工具触发

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

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

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

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

认知

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

举个栗子

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

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

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

下面举些小栗子

栗子一

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

栗子二

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

栗子三

  1. top 看到软中断 CPU 使用率(si)偏高,进程列表能看到软中断进程 CPU 使用率也偏高
  2. 可以根据读取 /proc/softirqs 查看软中断类型和变化频率
  3. 如果是网络相关软中断导致的问题,可以进一步通过网络分析工具 sar、tcpdump 来分析

性能分析(6)- 如何迅速分析出系统 CPU 的瓶颈在哪里的更多相关文章

  1. 如何迅速分析出系统CPU的瓶颈在哪里?

    内容出自极客时间专栏<Linux 性能优化实战> CPU 的性能指标那么多,CPU 性能分析工具一抓一大把,换成实际的工作场景,该观察什么指标.选择哪个性能工具呢? 不要担心,今天我就以多 ...

  2. Db2性能:系统CPU高问题分析的一些思路

    Db2性能:系统CPU高问题分析的一些思路 1. 如何判断CPU高? 有很多操作系统的命令可以看出来,比如ps -elf,iostat, vmstat, top/topas, 2. 收集数据 CPU高 ...

  3. 性能监控工具以及java堆分析OOM

      一.性能监控工具 1.系统性能监控 Linux -确定系统运行的整体状态,基本定位问题所在 -uptime: ------系统时间 ------运行时间(例子中为127天) ------连接数(每 ...

  4. netty源码分析(十八)Netty底层架构系统总结与应用实践

    一个EventLoopGroup当中会包含一个或多个EventLoop. 一个EventLoop在它的整个生命周期当中都只会与唯一一个Thread进行绑定. 所有由EventLoop所处理的各种I/O ...

  5. jQuery-1.9.1源码分析系列(四) 缓存系统

    先前在分析Sizzle的时候分析到Sizzle有自己的缓存机制,点击这里查看.不过Sizzle的缓存只是对内使用的(内部自己存,自己取).接下来分析jQuery可以对外使用的缓存(可存可取). 首先需 ...

  6. sql中varchar(n),nvarchar(n) 长度性能及所占空间分析

    sql中varchar(n),nvarchar(n) 长度性能及所占空间分析 1.varchar(n),nvarchar(n) 中的n怎么解释: nvarchar(n)最多能存n个字符,不区分中英文. ...

  7. Linux内核分析— —构造一个简单的Linux系统MenuOS(20135213林涵锦)

    Linux内核分析— —构造一个简单的Linux系统MenuOS 实验内容 Linux内核的启动过程,从start_kernel到init进程启动 使用实验楼的虚拟机打开shell cd LinuxK ...

  8. sar 找出系统瓶颈的利器

    sar 找出系统瓶颈的利器sar是System Activity Reporter(系统活动情况报告)的缩写.sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态.它的 ...

  9. Linux系统CPU的性能监控及调优

    前言: 性能优化是一个老生常谈的话题,典型的性能问题如页面响应慢.接口超时,服务器负载高.并发数低,数据库频繁死锁等.尤其是在“糙快猛”的互联网开发模式大行其道的今天,随着系统访问量的日益增加和代码的 ...

随机推荐

  1. 痞子衡嵌入式:SNVS Master Key仅在i.MXRT10xx Hab关闭时才能用于DCP加解密

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT系列中数据协处理器DCP使用SNVS Master Key加解密的注意事项. i.MXRT不仅仅是处理性能超强的MCU,也是 ...

  2. ant design pro : 依赖项 webpack-theme-color-replacer 最新版导致项目无法启动?

    重新装了一个项目的依赖,结果发现打不开了? 报错如下: This dependency was not found: * webpack-theme-color-replacer/client in ...

  3. 10个Vue开发技巧助力成为更好的工程师·二

    优雅更新props 更新 prop 在业务中是很常见的需求,但在子组件中不允许直接修改 prop,因为这种做法不符合单向数据流的原则,在开发模式下还会报出警告.因此大多数人会通过 $emit 触发自定 ...

  4. 萌新学渗透之Hack The Box_Beep

    我将我的walkthrough过程用视频解说的形式记载 视频地址https://www.bilibili.com/video/BV1VT4y1j7dg 一是因为看我视频的后来者应该都是刚入门的新手,视 ...

  5. Kafka 入门(三)--为什么 Kafka 依赖 ZooKeeper?

    一.ZooKeeper 简介 1.基本介绍 ZooKeeper 的官网是:https://zookeeper.apache.org/.在官网上是这么介绍 ZooKeeper 的:ZooKeeper 是 ...

  6. undefined reference to `typeinfo for xxx 报错

    编译成功了,链接的时候出现了这个报错 产生”undefined reference to `typeinfo for xxx’“最常见的原因就是基类的虚函数未实现了. 由于C++类的实现可以分布在多个 ...

  7. JavaScript高级程序设计(第三版) 6/25

    第六章面向对象的程序设计 1.定义只有在内部才用的特性(attribute)时,描述了属性(property)的各种特征.这些特性是为了实现JavaScript引擎用的,因此在JavaScript中不 ...

  8. PHP preg_grep() 函数

    preg_grep 函数用于返回匹配模式的数组条目.高佣联盟 www.cgewang.com 语法 array preg_grep ( string $pattern , array $input [ ...

  9. Calibre LVS BOX 详细用法

    https://www.cnblogs.com/yeungchie/ LVS BOX的使用对于后端的团队协作起到非常便利的作用. 通过在lvs rules file添加BOX的相关语句可以达到这个目的 ...

  10. bzoj 1195 [HNOI2006]最短母串 bfs 状压 最短路 AC自动机

    LINK:最短母串 求母串的问题.不适合SAM. 可以先简化问题 考虑给出的n个字符串不存在包含关系. 那么 那么存在的情况 只可能有 两个字符串拼接起来能表示另外一个字符串 或者某个字符串的后缀可以 ...