我非常喜欢Flame Graph用于分析的想法,因为它有助于消除不需要的函数调用。然而,有一个问题是它需要分析器在每次收集样本时执行完整的堆栈转储。这可以通过DTrace或SystemTap轻松完成,但我需要能够在运行ubuntu的ARM设备上执行此操作(这会消除DTrace)。我还想在不重新编译内核的情况下执行此操作(这会消除SystemTap)。
是否有可能获得Valgrind / Callgrind或OProfile(或其他可以在Ubuntu中的ARM设备上运行的分析工具)输出类似于:
dtrace -n 'profile-1001 /pid == 12345 && arg1/ { @[ustack()] = count(); }
答案 0 :(得分:7)
尝试Linux perf_events(又名" perf"命令),它是主线Linux内核的一部分,通常通过linux-tools-common(或类似)软件包安装。我经常用它在Linux上创建火焰图。
我写了一些关于使用perf创建火焰图的说明:http://www.brendangregg.com/perf.html#FlameGraphs
答案 1 :(得分:1)
它使用gdb和以下命令:gdb --q --n --ex bt --batch --pid PID
有点慢,但有效。