3

我真的很喜欢使用火焰图进行分析的想法,因为它有助于消除不需要的函数调用。但是有一个问题,它要求分析器在每次收集样本时都进行完整的堆栈转储。这可以通过 DTrace 或 SystemTap 很容易地完成,但我需要能够在运行 ubuntu 的 ARM 设备上执行此操作(这消除了 DTrace)。我也想在不重新编译内核(消除 SystemTap)的情况下做到这一点。

是否有可能让 Valgrind/Callgrind 或 OProfile(或其他一些可以在 Ubuntu 的 ARM 设备上运行的分析工具)输出类似于:
dtrace -n 'profile-1001 /pid == 12345 && arg1/ { @[ustack()] = count(); }

4

2 回答 2

9

试试 Linux perf_events(又名“perf”命令),它是 Linux 主线内核的一部分,通常通过 linux-tools-common(或类似)包安装。我经常用它在 Linux 上创建火焰图。

我写了一些使用 perf 创建火焰图的说明:http ://www.brendangregg.com/perf.html#FlameGraphs

于 2014-06-04T17:28:19.353 回答
1

pstack 是由 Mike Dunlavey 建议的,不幸的是,在我应用 ARM 补丁并在 ARM 设备上运行它之后出现了段错误。直到我有时间看它,我找到了以下权宜之计:

http://www.commandlinefu.com/commands/view/4039/print-stack-trace-of-a-core-file-without-needing-to-enter-gdb-interactively

它通过以下命令使用 gdb:gdb --q --n --ex bt --batch --pid PID

有点慢但有效。

于 2012-05-02T06:59:35.293 回答