You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Bash脚本性能日志转为perf格式生成火焰图?

分析Bash脚本性能并生成火焰图的解决方案

1. 转换日志为火焰图兼容格式

你的日志已经包含调用栈深度(加号数量)、绝对时间戳和执行命令,只需计算每个命令的耗时并整理出调用栈结构:

日志处理脚本

创建process_trace.awk脚本:

BEGIN { prev_time = 0 }
{
    # 提取调用栈深度、时间戳、命令内容
    depth = match($0, /^\++/);
    time = substr($0, depth+1, index($0, "  ") - depth -1);
    cmd = substr($0, index($0, "  ") + 2);
    
    # 计算耗时并输出调用栈+耗时格式
    if (prev_time != 0) {
        duration = time - prev_time;
        # 维护调用栈:按深度更新栈元素
        stack[depth] = cmd;
        # 拼接完整调用栈(用分号分隔层级)
        full_stack = "";
        for (i=1; i<=depth; i++) {
            full_stack = full_stack (full_stack ? ";" : "") stack[i];
        }
        printf("%s %.6f\n", full_stack, duration);
    }
    prev_time = time;
}

将你的日志保存为bash_trace.log,执行处理:

awk -f process_trace.awk bash_trace.log > flamegraph_data.txt

2. 生成火焰图

使用火焰图工具生成可视化图表:

  1. 获取工具脚本:
git clone https://github.com/brendangregg/FlameGraph.git
  1. 生成SVG火焰图:
./FlameGraph/stackcollapse.pl flamegraph_data.txt | ./FlameGraph/flamegraph.pl > bash_script_perf.svg

打开bash_script_perf.svg即可直观查看各调用栈的耗时占比,快速定位性能瓶颈。

核心逻辑说明

  • 调用栈维护:通过加号数量确定当前命令的调用深度,动态更新栈数组,确保层级关系准确。
  • 耗时计算:利用相邻命令的绝对时间差,得到单条命令的执行耗时。
  • 火焰图解读:横向长度代表耗时占比,纵向为调用栈深度,点击节点可展开查看子调用的细节。

内容的提问来源于stack exchange,提问作者Ciprian Tomoiagă

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 00:35:05