C++ 性能剖析流程:从用户症状到热点证据
背景 一个函数看起来复杂,不代表它是热点。优化之前需要固定请求模型,让采样结果可以解释和复现。 核心判断 记录二进制版本、构建参数、负载与 CPU 拓扑。 先看调用树和时间占比,再按假设做一次最小改动。 同步观察吞吐、尾延迟与分配,避免局部收益换来整体退化。 最小示例 下面保留核心逻辑;业务类型、调用入口和环境配置按项目补齐。 perf record -F 99 -g -- ./service --scenario=steady; perf report --stdio | head -80 边界与误区 无符号或不可靠的栈展开会让火焰图失真。perf 权限、架构和事件支持不同,容器采样前要确认访问范围。 验证方式 同样场景至少重复多次,比较稳定区间;保留原始 perf.data 与符号,让他人能复查,而不是只留下截图。 小结 固定负载、编译选项和采样窗口,先用系统指标定位再用 profiler 解释热点。