☰ 第 04 章 · 观测工具:计数、剖析与跟踪
COURSE SOURCES

参考来源与版权说明

仅作来源说明 · 不提供原始资料下载
查看全部来源说明
01
START HERE

这章解决什么问题

同一个 CPU 使用率可能出现在 topvmstat、监测平台和 /proc/stat 中;它们往往不是四份独立证据,而是对同一内核计数器的不同呈现。本章教你反向追踪数字来源,判断工具覆盖的是系统还是进程、固定计数器还是事件,以及采集本身会不会扰动目标。

观测能力并不完整。现成计数器适合快速概览,剖析提供样本级代码路径,跟踪能保存单个事件的时间与参数;越深入通常开销和解释成本越高。正确顺序是先用低成本数据缩小范围,再对高价值事件做短时、有边界的深挖。

02
SECTION 02

五条核心结论

  1. 工具名不如数据源重要。 先问指标来自 /proc/sys、netlink、tracepoint、探针还是 PMC,才能判断含义和独立性。
  2. 计数器、剖析、跟踪回答不同问题。 计数器给汇总,剖析给代表性样本,跟踪给逐事件细节。
  3. 系统级与进程级要配对。 先确认整机是否异常,再定位进程/线程;只看一边容易丢失中断、内核线程或租户边界。
  4. 观测有成本。 固定计数器通常成本低;高频 tracepoint、kprobe/uprobe 和全量日志可能显著改变时序。
  5. 重要结论要交叉验证。 工具、文档、采集脚本和单位转换都可能出错,异常结果应由不同框架或已知负载复核。
03
SECTION 03

核心模型与关键指标

类型典型问题常见来源/工具主要限制
固定计数器每秒多少、平均多长、累计多少/proc/sysvmstatiostat汇总会隐藏分布与单次上下文
剖析CPU 时间主要在哪些代码路径perf record、BCC profile采样可能漏掉短暂或周期同步事件
跟踪这次事件何时发生、参数和结果是什么tracepoint、Ftrace、BPF、perf trace高频事件带来 CPU/存储开销
监测指标随小时、天、版本如何变化sar、代理、时序数据库采样周期和聚合可能抹平尖峰

/proc 主要暴露进程与系统统计,/sys 主要组织设备、拓扑和配置。tracepoint 是内核预置、相对稳定的事件接口;kprobe 能动态观察大量内核函数,但函数与参数会随版本变化;uprobe 对用户程序做动态探测,通常比内核探针更昂贵;USDT 是应用预置的稳定语义探针;PMC 则从处理器硬件给出周期、指令、缓存未命中和分支等低层指标。

04
SECTION 04

诊断步骤

  1. 先明确对象与时间:整机、容器、进程还是线程;当前 10 秒、事故窗口还是历史趋势。
  2. 用固定计数器建立概览,并记录采样间隔、单位、内核和工具版本。
  3. 找到指标的原始来源。确认多个仪表盘是否只是重复读取同一计数器,而非独立证据。
  4. sar 或监测平台比较正常/异常窗口,确定变化开始时间与发布、配置、负载是否对齐。
  5. 若需解释 CPU 消耗,先短时剖析;若需事件参数、持续时间或因果顺序,再选择稳定 tracepoint/USDT。
  6. 使用动态探针前确认符号、内核版本、事件频率、过滤范围与权限;先在测试环境估算开销。
  7. 对关键结论用另一种数据源复核,并检查采集器是否错误解析单位、截断小数或误读累计值。
05
SECTION 05

常用工具与命令

vmstat 1 3
mpstat -P ALL 1 3
iostat -xz 1 3
sar
sar -u -n TCP,ETCP
sar -n TCP 1 5
cat /proc/meminfo
cat /proc/pressure/cpu
perf list tracepoint

这些命令以读取为主。sar 无参数时读取已归档数据;若数据采集未启用,会明确报错,实时模式仍可能可用。perf list tracepoint 只枚举事件,但 perf 的安装包名和权限策略随发行版而异。/proc/sys 中既有只读文件也有可写控制项,本章仅建议读取,切勿把网上的 echo ... > /sys/... 当作观测命令。某些 /proc/PID/smaps 类文件需要遍历页表,读取成本高于普通计数器。

06
SECTION 06

如何解读结果

  • 累计计数器要取两个时间点的差值再除以间隔,才能得到速率;不同启动时长主机的原始累计值不可直接比较。
  • vmstatmpstat、监测代理若都来自 /proc/stat,一致只能说明展示链路一致,不能排除源计数或解释错误。
  • sar 的历史记录能回答“何时开始”,实时 sar ... 1 5 回答“现在每秒怎样”;不要混用 5 分钟归档均值与 1 秒现象。
  • 剖析采样率常避开整百频率以降低与周期任务同步的风险。宽栈表示样本多,不直接等于调用次数多。
  • tracepoint 有事件名、参数和格式,适合构建可复用工具;kprobe/uprobe 暴露实现细节,升级后必须重新验证。
  • PMC 能解释高 CPU 使用率中的指令效率、缓存和停滞,但事件含义依处理器型号而变,不能跨架构机械比较。
07
SECTION 07

常见误判

  1. 把“可观测”当“完整可见”。 没有现成指标只是未知,不是该层没有问题。
  2. 认为固定计数器绝对零开销。 默认维护成本通常很低,频繁读取、文本解析和逐进程扫描仍会消耗资源。
  3. 认为跟踪必然比采样准确。 全量事件若导致丢失、缓冲溢出或扰动目标,结果同样会失真。
  4. 相信手册永远与内核同步。 软件变化后文档和列含义可能滞后,关键指标应检查版本与源代码。
  5. 把 `top` 自己排在前面当成业务异常。 大量进程和高刷新率下,逐进程扫描本身可能可见。
  6. 只按工具交叉验证。 两个工具共用同一底层框架时,无法发现该框架本身的问题。
08
SECTION 08

五分钟自测

  1. 说明固定计数器、剖析与跟踪的核心差别。
  2. 为什么三个仪表盘都显示相同 CPU 使用率,不等于三次独立验证?
  3. tracepoint 与 kprobe 在稳定性和覆盖范围上如何取舍?
  4. sar 历史模式和实时模式分别适合回答什么问题?
  5. 使用高频事件跟踪前,至少要确认哪四项风险信息?
09
SECTION 09

本章小结

可靠观测始于理解数据源。先用低成本计数器与历史监测确定范围,再用剖析解释主要代码路径,用跟踪回答单次事件的参数和时序。每次深入都要匹配对象、时间粒度、权限与版本,并把观察者效应、事件丢失和采集器错误作为结果的一部分进行审查。

10
SECTION 10

来源定位

主题PDF 页码
工具全景、静态检查与危机工具包182-185
固定计数器、剖析、跟踪和监测186-191
/proc/sys、延时核算与 netlink192-199
tracepoint 的接口、参数与开销200-204
kprobe、uprobe 与 USDT204-209
硬件性能计数器和其他来源209-214
sar 的覆盖、归档、报告与实时模式214-219
跟踪器选择与观测结果校验219-221
练习与参考资料221-223
📝
QUICK CHECK

章节测验

5 道单选题。答错有解析,答对看来源页码。

单选题 · 第 1/5
已答 0/5

要回答“过去 10 秒 CPU 时间主要花在哪些调用栈”,最适合先选哪类工具?

⚡ 用本章题目开始计时冲刺