我正在尝试使用火焰图为perf-地图代理程序生成一个Java程序。我知道您可以使用perf-java-record-stack记录正在运行的进程的数据。我还发现,您可以在FlameGraph目录中使用脚本jmaps。我已经找到了Brendan Gregg的例子和堆叠溢出柱来说明这一点。但是,在所有这些示例中,都没有给出Java作为perf record的参数(这意味着perf收集整个系统的堆栈跟踪)。
我希望记录整个程序执行过程中的分析数据(最好是没有其他的)。有办法这样做吗?我试过:
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是一个正在运行的进程,而不是我试图记录数据的进程。
发布于 2019-06-17 20:48:25
我想你想要的可能是:
-a -g运行perf record。jmap应用程序时,您可以收集与JIT相关的符号。perf record。perf script来过滤pid的输出。那时,您的Java进程已经在运行,您知道它是什么pid。(打开perf script的输出以查看,您将知道如何进行筛选)通过这种方式,您可以记录整个时间段的Java应用程序。
https://stackoverflow.com/questions/54828346
复制相似问题