11 | 如何迅速分析CPU瓶颈

174 阅读3分钟

总结一下,当我们在生产上碰到CPU瓶颈时如何一步步分析

1. 性能指标

  1. CPU使用率
  • 用户 CPU 使用率 (user) :表示 CPU 在用户态运行的时间百分比,较高说明应用程序繁忙。
  • 系统 CPU 使用率 (system) :表示 CPU 在内核态运行的时间百分比,较高说明内核繁忙。
  • 等待 I/O 的 CPU 使用率 (iowait) :表示等待 I/O 的时间百分比,较高说明 I/O 操作时间长。
  • 软中断和硬中断的 CPU 使用率:分别表示处理软中断和硬中断的时间百分比,较高说明系统发生大量中断。
  • 虚拟化环境下的 CPU 使用率
    • 窃取 CPU 使用率 (steal) :表示被其他虚拟机占用的 CPU 时间百分比。
    • 客户 CPU 使用率 (guest) :表示运行虚拟机的 CPU 时间百分比。
  1. 负载

一先看负载与逻辑CPU的数量相比,大于说明系统存在压力,继续看1、5、15分钟的负载趋势。这两个指标可以计算出超载百分比和趋势变化率。可以作为监控指标。



  1. 上下文切换
  • 无法获取资源而导致的自愿上下文切换;
  • 被系统强制调度导致的非自愿上下文切换。
  1. CPU 缓存命中率

2. 性能诊断

谈到诊断,有一个比较出名且通用的方法论:

  1. 工具法:
    • 列出可用到的性能工具(可选的,安装的或者可购买的)
    • 对于每一个工具,列出它提供的有用的指标
    • 对于每一个指标,列出阐释该指标可能的规则
  1. USE方法:
    • 资源
    • 使用率
    • 饱和度
    • 错误

通常关心使用率、饱和度、错误即可。这两套方法取自《性能之巅:洞悉系统、企业云计算》。

那么首先基于工具法,在结合生产实际的情况,我们可以从两个维度出发:

  • 从指标维度入手
  • 从工具维度入手

实际上指标和工具需要两者结合方式使用。在我们熟悉的环境中,可以以指标出发,在选择工具;反之需要先选择工具,在判断工具中可以获取哪些指标。因为在陌生的环境中,首先要知道当前环境都有哪些工具可以使用,并且这些个工具可以得到哪些指标,得到的这些指标是否可以满足性能分析。

根据指标找工具

根据工具查指标

上面给的方法比较大二全,可以作为RAG等语料喂进去,不过实际人在做性能分析的时候并不会把这些全部执行一遍。下面的常见的分析思路(盗图)。

从top、vmstat、pidstat入手;当然也可以使用dstat(一般都不会安装)

系统各个组件的延时分布差异