如何获取 Java 分析转储以在 Mac 上创建火焰图?

2024-01-16

我想从我的 Java 应用程序中收集堆栈跟踪来创建CPU 火焰图 http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html用于分析。

这与这个问题非常相似:如何从每个示例中的分析器中获取完整的堆栈转储以用于火焰图? https://stackoverflow.com/questions/10333376/how-to-get-complete-stack-dump-from-profiler-in-every-sample-for-use-in-flame-gr有 2 个区别:

  1. 我使用 Java 代码并且需要 Java 堆栈跟踪
  2. 我正在 Mac 上工作(这意味着没有pref据我所知dtraceOSX 上不支持jstack扩大)。

我已经尝试过了轻量级 java-profiler https://code.google.com/p/lightweight-java-profiler/ and 诚实的剖析师 https://github.com/RichardWarburton/honest-profiler,而且这两个似乎都不能在 Mac 上运行。我也尝试过VisualVM http://visualvm.java.net,但我无法让它生成我需要的堆栈跟踪转储。

对我来说,首要任务是从 Java 堆栈跟踪生成火焰图,但是拥有本机调用堆栈也很棒,因为它可以让我解决 I/O 问题(甚至可能生成热/冷火焰图 http://www.brendangregg.com/FlameGraphs/hotcoldflamegraphs.html).


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

https://github.com/brendangregg/FlameGraph 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 https://github.com/brendangregg/FlameGraph

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取 Java 分析转储以在 Mac 上创建火焰图? 的相关文章

  • 不同帐户上的 Spring Boot、JmsListener 和 SQS 队列

    我正在尝试开发一个 Spring Boot 1 5 应用程序 该应用程序需要侦听来自两个不同 AWS 帐户的 SQS 队列 是否可以使用 JmsListener 注解创建监听器 我已检查权限是否正确 我可以使用 getQueueUrl 获取
  • 如何循环遍历所有组合,例如48 选择 5 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在java中从大小为n的集合中迭代生成k个元素子集 https stackoverflow com questions 4504974 how to iteratively generate k
  • 使用 LinkedList 实现下一个和上一个按钮

    这可能是一个愚蠢的问题 但我很难思考清楚 我编写了一个使用 LinkedList 来移动加载的 MIDI 乐器的方法 我想制作一个下一个和一个上一个按钮 以便每次单击该按钮时都会遍历 LinkedList 如果我硬编码itr next or
  • 如何在java中将一个数组列表替换为另一个不同大小的数组列表

    我有两个大小不同的数组列表 如何从此替换 ArrayList
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • java.lang.IllegalStateException:提交响应后无法调用 sendRedirect()

    这两天我一直在尝试找出问题所在 我在这里读到我应该在代码中添加一个返回 我做到了 但我仍然得到 java lang IllegalStateException Cannot call sendRedirect after the respo
  • 将 MOXy 设置为 JAXB 提供程序,而在同一包中没有属性文件

    我正在尝试使用 MOXy 作为我的 JAXB 提供程序 以便将内容编组 解组到 XML JSON 中 我创建了 jaxb properties 文件 内容如下 javax xml bind context factory org eclip
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 没有动画

    不能比标题说得更清楚了 我有一个由文本输入布局包裹的 EditText 我试图在 EditText 失去焦点时触发一个事件 但是 一旦应用了事件侦听器 TextInputLayout 就不再对文本进行动画处理 它只是位于 editText
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • 使用 cython 在 python 中对小数组进行高效数学运算

    我使用 numpexpr 对大型数组进行快速数学计算 但如果数组的大小小于 CPU 缓存 则使用简单数组数学在 Cython 中编写代码会更快 特别是在多次调用该函数的情况下 问题是 如何在 Cython 中使用数组 或者更明确地说 Cyt
  • memory_get_peak_usage() 与“实际使用情况”

    If the real usage参数设置为truePHP DOCS 说它将获取从系统分配的内存的实际大小 如果它是false它将获得报告的内存emalloc 这 2 个选项中的哪一个返回最大值 相对于 php ini 中的内存限制值分配的
  • R函数不会修改全局变量

    我有一段简单的 R 代码 它从网站读取 html 数据 然后我尝试循环浏览页面并从每个页面获取数据 我已经多次使用这段代码并且它有效 它将每个页面的结果添加到 R 变量中 但由于某种原因 它在该网站上不起作用 有任何想法吗 library
  • 使 jQuery DataTables 默认提交所有行,而不仅仅是搜索时显示的行

    我使用 jQuery DataTables 来显示系统中的记录 通常使用
  • 使用抗锯齿绘制旋转位图

    我尝试在打开抗锯齿的情况下绘制旋转位图 但它仍然有锯齿并且不平滑 有什么帮助吗 我做了如下 final Paint p new Paint Paint ANTI ALIAS FLAG p setAntiAlias true canvas r
  • 如何使用 grails 1.3.2 和插件 spring-security-core 1 实现自定义 FilterSecurityInterceptor ?

    我正在编写一个 grails 1 3 2 应用程序并使用 spring security core 1 0 实现安全性 由于超出此问题范围的原因 除了开箱即用的拦截器之外 我还实现了自定义 FilterSecurityInterceptor
  • 如何将 future<> 分配给 flutter 中的小部件?

    假设我有一个SingleChildScrollView 其内容是从文件中读取的 singleChildScrollView padding EdgeInsets all 8 0 child nw Text getTextFromFile l
  • Pandas:查找包含列表的一列中的最大值

    我有一个像这样的数据框 fly frame day plcae 0 1 2 3 4 5 A 1 1 2 3 4 B 2 1 2 C 3 1 2 3 4 D 如果我想找到日期列中每个条目的最大值 例如 fly frame day plcae
  • 安卓:语音识别

    可能重复 但我没有找到下面问题的答案 这两天我一直在研究语音识别 但没有得到问题的答案 是否可以将语音识别作为服务来运行 我想实现这样的事情 尽管我的手机通过语音识别处于睡眠模式 但我需要拨打一个号码 当我在火车 公共汽车等地方时 语音识别
  • JavaScript Regex - 查找所有可能的匹配项,即使是在已捕获的匹配项中

    我正在尝试获得所有可能的匹配使用 JavaScript 的正则表达式从字符串中获取 看来我这样做的方法没有匹配已经匹配的字符串部分 变量 var string A1B1Y A1B2Y A1B3Y A1B4Z A1B5Y A1B6Y A1B7
  • 禁用索引 pandas 数据框

    如何删除或禁用 pandas Dataframe 中的索引 我正在从 python for dataanalysis 一书中学习 pandas 并且我已经知道我可以使用 dataframe drop 删除一列或一行 但我没有找到任何关于禁用
  • Mongodb - 当属性具有 Interface 返回类型时如何反序列化

    我试图避免在数据层和使用该层的客户端代码之间引入任何依赖关系 但在尝试使用 Mongo 执行此操作 使用 MongoRepository 时遇到了一些问题 MongoRepository 显示了您创建反映数据结构的类型并在需要时继承实体的示
  • Selenium:如何将浏览器设置为离线模式?

    我需要测试我的应用程序的一项功能 该功能设计为在离线模式下执行 在互联网连接恢复之前使用本地存储对数据进行排队 Selenium可以将浏览器设置为离线模式吗 您可以为 Firefox 创建新的浏览器配置文件 然后配置该配置文件以使用离线模式
  • IE9 是否支持 WebGL 和/或 WebSockets? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions IE9 是
  • 应用栏上的圆角底部

    我想制作一个圆底的应用栏 如下所示 我将如何实现这样的应用程序栏 我尝试阅读 CustomPainter 的文档 但我不认为这是正确的方法 在 Flutter 中 您可以使用 shape 属性在 AppBar 小部件中自定义形状 AppBa
  • 如何从 sqlalchemy jsonify 对象?

    我正在使用 Flask SQLAlchemy 和 javascript 我需要通过 AJAX 将查询结果以 json 格式传递给 javascript 但我不断收到此错误 raise TypeError repr o is not JSON
  • Maven 出现 Eclipse 错误“路径必须包含项目和资源名称”

    我最近开始将 Maven 与 Eclipse 一起使用 我已经设置了几个项目 并且我注意到 如果我尝试指定项目目录之外的构建目录 以覆盖目标 则在执行 更新项目 时会出现错误 更新 Maven 项目 遇到问题 期间发生内部错误 更新 MAv
  • SQLite更新查询Android

    该表包含 4 列 rowID word defintition group id 我想更改某一行的单词和定义 这是我的代码 word 是一个对象 其中存储了 word definition id 和 group id ContentValu
  • 在bat上运行带有删除文件的jar

    我想将文件拖放到 bat 文件上 删除它后 我想运行一个 jar 文件 并将删除的文件路径作为输入 如何才能使用相对路径运行 jar 文件 我的 bat 文件运行的目录是我的用户目录 而不是它所在的目录 goal cmd c java ja
  • 如何获取 Java 分析转储以在 Mac 上创建火焰图?

    我想从我的 Java 应用程序中收集堆栈跟踪来创建CPU 火焰图 http www brendangregg com FlameGraphs cpuflamegraphs html用于分析 这与这个问题非常相似 如何从每个示例中的分析器中获