gpt4 book ai didi

java - 如何获取用于在 Mac 上创建火焰图的 Java 分析转储?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:52:42 25 4
gpt4 key购买 nike

我想从我的 Java 应用程序中收集堆栈跟踪以创建 CPU Flame Graphs用于分析。

这与这个问题非常相似:How to get complete stack dump from profiler in every sample for use in flame graph?有两个区别:

  1. 我使用 Java 代码,我需要 Java 堆栈跟踪
  2. 我在 Mac 上工作(这意味着没有 pref 并且 OSX 上的 AFAIK dtrace 不支持 jstack 扩展)。

我已经试过了lightweight-java-profilerHonest profiler ,而且它们似乎都不适用于 Mac。我也试过VisualVM ,但我无法让它生成我需要的堆栈跟踪转储。

对我来说,首要任务是从 Java 堆栈跟踪生成火焰图,但如果拥有 native 调用堆栈也很棒,因为它可以让我解决 I/O 问题(甚至可能生成 hot/cold flame graphs)。

最佳答案

好消息,FlameGraph 存储库有一个“脚本”可以与已经在其中的 jstacks 一起工作。

https://github.com/brendangregg/FlameGraph

它是 stackcollapse-jstack.pl

似乎在默认情况下,它只期望输入中的堆栈跟踪后堆栈跟踪,并将每个堆栈跟踪都计为“样本点”。

所以你可以在一个文件中执行多个 jstack(运行一次或几次,或者每秒一次“一段时间”等):

jstack pid_of_your_jvm >> my_jstack

然后执行该脚本:

 ./stackcollapse-jstack.pl my_jstack > my_jstack.folded

最后转换为火焰图:

 ./flamegraph.pl --color=java my_jstack.folded > my_jstack.svg

不需要第三方助手(尽管它们可能仍然有用)。

另请注意,stackcollapse-jstack.pl 文件会丢弃非 RUNNABLE 线程,如果您还想包含“空闲”线程(通常不需要),您可能需要对其进行调整。

显然,您也可以使用 linux“perf”命令为 java 进程生成堆栈,请参阅自述文件 https://github.com/brendangregg/FlameGraph

例如,这可能包括更多 native 调用。

关于java - 如何获取用于在 Mac 上创建火焰图的 Java 分析转储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27228972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com