COURSE SOURCES
仅作来源说明 · 不提供原始资料下载参考来源与版权说明
《性能之巅(第2版)》非官方个人学习笔记 · 内容为压缩转述 · 页码按 PDF 阅读器从 1 开始
01
START HERE
这章解决什么问题
同一个 CPU 使用率可能出现在 top、vmstat、监测平台和 /proc/stat 中;它们往往不是四份独立证据,而是对同一内核计数器的不同呈现。本章教你反向追踪数字来源,判断工具覆盖的是系统还是进程、固定计数器还是事件,以及采集本身会不会扰动目标。
观测能力并不完整。现成计数器适合快速概览,剖析提供样本级代码路径,跟踪能保存单个事件的时间与参数;越深入通常开销和解释成本越高。正确顺序是先用低成本数据缩小范围,再对高价值事件做短时、有边界的深挖。
02
SECTION 02
五条核心结论
- 工具名不如数据源重要。 先问指标来自
/proc、/sys、netlink、tracepoint、探针还是 PMC,才能判断含义和独立性。 - 计数器、剖析、跟踪回答不同问题。 计数器给汇总,剖析给代表性样本,跟踪给逐事件细节。
- 系统级与进程级要配对。 先确认整机是否异常,再定位进程/线程;只看一边容易丢失中断、内核线程或租户边界。
- 观测有成本。 固定计数器通常成本低;高频 tracepoint、kprobe/uprobe 和全量日志可能显著改变时序。
- 重要结论要交叉验证。 工具、文档、采集脚本和单位转换都可能出错,异常结果应由不同框架或已知负载复核。
03
SECTION 03
核心模型与关键指标
| 类型 | 典型问题 | 常见来源/工具 | 主要限制 |
|---|---|---|---|
| 固定计数器 | 每秒多少、平均多长、累计多少 | /proc、/sys、vmstat、iostat | 汇总会隐藏分布与单次上下文 |
| 剖析 | CPU 时间主要在哪些代码路径 | perf record、BCC profile | 采样可能漏掉短暂或周期同步事件 |
| 跟踪 | 这次事件何时发生、参数和结果是什么 | tracepoint、Ftrace、BPF、perf trace | 高频事件带来 CPU/存储开销 |
| 监测 | 指标随小时、天、版本如何变化 | sar、代理、时序数据库 | 采样周期和聚合可能抹平尖峰 |
/proc 主要暴露进程与系统统计,/sys 主要组织设备、拓扑和配置。tracepoint 是内核预置、相对稳定的事件接口;kprobe 能动态观察大量内核函数,但函数与参数会随版本变化;uprobe 对用户程序做动态探测,通常比内核探针更昂贵;USDT 是应用预置的稳定语义探针;PMC 则从处理器硬件给出周期、指令、缓存未命中和分支等低层指标。
04
SECTION 04
诊断步骤
- 先明确对象与时间:整机、容器、进程还是线程;当前 10 秒、事故窗口还是历史趋势。
- 用固定计数器建立概览,并记录采样间隔、单位、内核和工具版本。
- 找到指标的原始来源。确认多个仪表盘是否只是重复读取同一计数器,而非独立证据。
- 用
sar或监测平台比较正常/异常窗口,确定变化开始时间与发布、配置、负载是否对齐。 - 若需解释 CPU 消耗,先短时剖析;若需事件参数、持续时间或因果顺序,再选择稳定 tracepoint/USDT。
- 使用动态探针前确认符号、内核版本、事件频率、过滤范围与权限;先在测试环境估算开销。
- 对关键结论用另一种数据源复核,并检查采集器是否错误解析单位、截断小数或误读累计值。
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
如何解读结果
- 累计计数器要取两个时间点的差值再除以间隔,才能得到速率;不同启动时长主机的原始累计值不可直接比较。
vmstat、mpstat、监测代理若都来自/proc/stat,一致只能说明展示链路一致,不能排除源计数或解释错误。sar的历史记录能回答“何时开始”,实时sar ... 1 5回答“现在每秒怎样”;不要混用 5 分钟归档均值与 1 秒现象。- 剖析采样率常避开整百频率以降低与周期任务同步的风险。宽栈表示样本多,不直接等于调用次数多。
- tracepoint 有事件名、参数和格式,适合构建可复用工具;kprobe/uprobe 暴露实现细节,升级后必须重新验证。
- PMC 能解释高 CPU 使用率中的指令效率、缓存和停滞,但事件含义依处理器型号而变,不能跨架构机械比较。
07
SECTION 07
常见误判
- 把“可观测”当“完整可见”。 没有现成指标只是未知,不是该层没有问题。
- 认为固定计数器绝对零开销。 默认维护成本通常很低,频繁读取、文本解析和逐进程扫描仍会消耗资源。
- 认为跟踪必然比采样准确。 全量事件若导致丢失、缓冲溢出或扰动目标,结果同样会失真。
- 相信手册永远与内核同步。 软件变化后文档和列含义可能滞后,关键指标应检查版本与源代码。
- 把 `top` 自己排在前面当成业务异常。 大量进程和高刷新率下,逐进程扫描本身可能可见。
- 只按工具交叉验证。 两个工具共用同一底层框架时,无法发现该框架本身的问题。
08
SECTION 08
五分钟自测
- 说明固定计数器、剖析与跟踪的核心差别。
- 为什么三个仪表盘都显示相同 CPU 使用率,不等于三次独立验证?
- tracepoint 与 kprobe 在稳定性和覆盖范围上如何取舍?
sar历史模式和实时模式分别适合回答什么问题?- 使用高频事件跟踪前,至少要确认哪四项风险信息?
09
SECTION 09
本章小结
可靠观测始于理解数据源。先用低成本计数器与历史监测确定范围,再用剖析解释主要代码路径,用跟踪回答单次事件的参数和时序。每次深入都要匹配对象、时间粒度、权限与版本,并把观察者效应、事件丢失和采集器错误作为结果的一部分进行审查。
10
SECTION 10
来源定位
| 主题 | PDF 页码 |
|---|---|
| 工具全景、静态检查与危机工具包 | 182-185 |
| 固定计数器、剖析、跟踪和监测 | 186-191 |
/proc、/sys、延时核算与 netlink | 192-199 |
| tracepoint 的接口、参数与开销 | 200-204 |
| kprobe、uprobe 与 USDT | 204-209 |
| 硬件性能计数器和其他来源 | 209-214 |
| sar 的覆盖、归档、报告与实时模式 | 214-219 |
| 跟踪器选择与观测结果校验 | 219-221 |
| 练习与参考资料 | 221-223 |
📝
QUICK CHECK
章节测验
共 5 道单选题。答错有解析,答对看来源页码。
单选题 · 第 1/5 题
已答 0/5