本目录包含用于生成火焰图的自动化工具,支持同时记录CPU和内存分配。
generic_profiler.py- 基于配置文件的通用分析器projects.yaml- 项目配置文件flamegraph_analyzer.py- 整合的火焰图数据分析器run_analysis.sh- 交互式火焰图分析自动化脚本(支持菜单选择)
- dtrace (macOS系统自带)
- FlameGraph工具集 (推荐clone在
~/git/FlameGraph) - Python 3.6+
# 进入目录
cd ~/git/my-flamegraph
# 分析所有项目(默认30秒采样)
python3 generic_profiler.py
# 分析特定项目
python3 generic_profiler.py --project liii
python3 generic_profiler.py --project mogan
# 自定义采样时间
python3 generic_profiler.py --time 60
# 仅构建不分析
python3 generic_profiler.py --build-only
# 不构建,仅分析
python3 generic_profiler.py --no-build
# 禁用内存分析
python3 generic_profiler.py --no-memory# 进入目录
cd ~/git/my-flamegraph
# 交互式模式(菜单选择)
./run_analysis.sh
# 命令行模式:分析liii项目(默认CPU+内存)
./run_analysis.sh liii
# 仅分析CPU
./run_analysis.sh liii --cpu-only
# 分析已有火焰图文件
./run_analysis.sh liii/cpu.folded
# 指定输出目录
./run_analysis.sh liii --output my_results/配置文件 projects.yaml 定义了要分析的项目。可以轻松添加新项目:
# 添加新项目
myproject:
path: "/path/to/your/project"
output_dir: "/path/to/output"
build_cmds:
- "./configure"
- "make"
executable: "myapp" # 可执行文件名称
target: "" # 构建目标(如适用)
args: [] # 启动参数
env: {} # 环境变量
startup_delay: 3 # 启动后等待时间(秒)分析完成后,输出目录将包含:
cpu.svg- CPU火焰图memory.svg- 内存分配火焰图(如果启用)cpu.stacks,memory.stacks- 原始堆栈数据cpu.folded,memory.folded- 折叠后的堆栈数据profiling.log- 分析日志
在浏览器中打开SVG文件查看火焰图:
- 点击任何部分可以放大
- 使用Ctrl+F搜索函数名
- 使用右上角的控件调整显示
- 需要sudo权限运行dtrace
- 分析过程中会启动目标程序并附加dtrace
- 分析完成后会自动终止目标程序
- 如果程序需要用户交互,可能影响分析结果
- 找不到可执行文件:检查
executable配置项,确保项目已构建 - dtrace权限问题:需要sudo权限,可能会提示输入密码
- 程序过早退出:调整
startup_delay参数 - 火焰图生成失败:检查FlameGraph目录路径是否正确
- 编辑
projects.yaml文件,添加新项目配置 - 运行
python3 generic_profiler.py --project 项目名进行测试 - 根据需要调整配置参数