首页/系统/Linux 内核与性能调优速查/BCC profile 生成 On-CPU 火焰图

BCC profile 生成 On-CPU 火焰图

profile 工具按栈采样并直接输出折叠格式, 省去 perf 导出步骤。

BCC 采样出图

BCC 工具集里的栈采样工具直接输出折叠格式,省掉了先导出事件流再转换的中间步骤,适合快速出图。它按固定频率对运行中的处理器采样,统计各调用栈出现次数,再把折叠文件交给火焰图脚本渲染即可。

基本信息

适用平台Linux,需要内核 eBPF 支持与相应权限
工具位置随发行版不同,常见于系统工具目录
关键参数采样频率、输出折叠格式、采样时长、目标进程
输出折叠栈文件,一行一条调用链加计数
命名差异发行版常在工具名后加统一后缀

典型使用场景

  • 现场快速出图,不依赖额外的转换脚本。
  • 按指定进程采样,避免整机噪声干扰。
  • 定期出图归档,观察热点随时间的变化。
  • 与基于内核采样工具的结果互相印证。
  • 在容器或云主机上做只读观测,不修改应用。

生成

生成
profile-bpfcc -F 99 -f 30 > /tmp/oncpu.folded        # 99Hz 采样 30 秒,输出折叠格式
profile-bpfcc -F 99 -f -p 12345 30 > /tmp/app.folded  # 只采样指定进程
ls /usr/share/bcc/tools/profile                       # 确认工具实际路径
./flamegraph.pl /tmp/oncpu.folded > /tmp/oncpu.svg    # 渲染火焰图
wc -l /tmp/oncpu.folded                               # 看折叠文件规模,判断采样是否覆盖充分

常用参数

参数作用使用建议
采样频率每秒采样次数先低频试跑,确认影响后再提高
折叠输出直接产出折叠格式便于接火焰图脚本
采样时长窗口长度覆盖完整业务周期
目标进程限定采样对象减少无关噪声
栈类型选择用户态栈或内核栈按问题所在层次选择
不同发行版的工具名与安装路径不同,脚本里硬编码路径容易在不同机器上失败;先用目录列表确认再写进自动化脚本。
采样频率提高会明显增加开销,且不带目标进程时是全系统采样,噪声偏多;生产环境先用低频小窗口试跑,确认可接受再扩大。

易错点

  • 采样频率调得过高,采样本身的开销改变了被观测对象的行为。
  • 未指定目标进程做全系统采样,噪声淹没真正关心的服务。
  • 工具名与路径随发行版不同,脚本硬编码导致换机器就失败。
  • 采样窗口太短,没覆盖完整业务周期,图形看不出主要路径。
  • 忽略权限与内核支持,工具启动失败却以为是数据为空。

数据来源与参考

  • BCC 工具集文档 profile
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌