首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为整个Java程序执行生成火焰图

为整个Java程序执行生成火焰图
EN

Stack Overflow用户
提问于 2019-02-22 13:38:28
回答 1查看 947关注 0票数 0

我正在尝试使用火焰图perf-地图代理程序生成一个Java程序。我知道您可以使用perf-java-record-stack记录正在运行的进程的数据。我还发现,您可以在FlameGraph目录中使用脚本jmaps。我已经找到了Brendan Gregg的例子堆叠溢出柱来说明这一点。但是,在所有这些示例中,都没有给出Java作为perf record的参数(这意味着perf收集整个系统的堆栈跟踪)。

我希望记录整个程序执行过程中的分析数据(最好是没有其他的)。有办法这样做吗?我试过:

代码语言:javascript
复制
perf record -a -g java -XX:+PreserveFramePointer <other JVM arguments> <my java program>; sudo ~/bin/brendangregg/FlameGraph/jmaps

答案是:

代码语言:javascript
复制
[ 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是一个正在运行的进程,而不是我试图记录数据的进程。

EN

回答 1

Stack Overflow用户

发布于 2019-06-17 20:48:25

我想你想要的可能是:

  1. 在java应用程序被激活之前,经常使用-a -g运行perf record
  2. 运行jmap应用程序时,您可以收集与JIT相关的符号。
  3. 在java应用程序完成后结束perf record
  4. 通过感兴趣的perf script来过滤pid的输出。那时,您的Java进程已经在运行,您知道它是什么pid。(打开perf script的输出以查看,您将知道如何进行筛选)
  5. 运行火焰记录仪生成脚本。

通过这种方式,您可以记录整个时间段的Java应用程序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54828346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档