我正在尝试使用perf-map-agent为 Java 程序生成火焰图。我知道您可以使用它来记录正在运行的进程的数据。我还发现您可以使用Flame Graph 目录中的脚本。我找到了Brendan Gregg 的示例以及说明这一点的 Stack Overflow 帖子。但是,在这些示例中,Java 进程都没有作为参数给出(这意味着 perf 收集整个系统的堆栈跟踪)。perf-java-record-stack
jmaps
perf record
我想记录整个程序执行的分析数据(最好不要别的)。有没有办法做到这一点?我努力了:
perf record -a -g java -XX:+PreserveFramePointer <other JVM arguments> <my java program>; sudo ~/bin/brendangregg/FlameGraph/jmaps
答案是:
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 1.711 MB perf.data (3449 samples) ]
Fetching maps for all java processes...
Mapping PID 2213 (user malin):
wc(1): 2970 9676 156108 /tmp/perf-2213.map
始终使用相同的 PID。此 PID 是一个正在运行的进程,而不是我尝试为其记录数据的进程。