问题标签 [jfr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
5252 浏览

memory-management - 如何读取 JFR 文件?

我是一个启用 JFR 的 java 应用程序,它生成了我不熟悉使用 JFR 的附件,所以我需要帮助来阅读该文件。我需要帮助阅读文件。应用程序何时启动和停止,使用了多少内存,橙色和粉色条分别表示什么?

下午 1:28:00 之后没有数据。这意味着什么?

在此处输入图像描述

0 投票
1 回答
716 浏览

intellij-idea - 使用 IntelliJ IDEA 从 JFR 转储生成火焰图

IDEA 在使用“Run with Java Flight Recorder”时会生成那些整洁的火焰图。

在此处输入图像描述

虽然我知道能够做到这一点的外部工具,但是否可以使用 IDEA 从现有的 jfr 转储中生成这些火焰图?

0 投票
1 回答
255 浏览

java - JMC 7中的调用树?

昨天我将一个项目升级到 java 11,因为我想尝试一下 java 任务控制。经过一番摆弄后,我设法让一切正常运行。

在网上搜索有关 java 任务控制的信息时,我发现一些旧页面提到了 JMC 的封闭源代码版本中存在的“调用树”功能(在“代码”选项卡上)。这对于查找使用大量 cpu 时间的方法非常方便。

有人知道我在哪里可以找到 JMC 的开源版本(JDK Mission Control 7.0.1+b01)中的“调用树”功能吗?

(或者可能是另一种方法来查找每种方法的 cpu 使用情况?)

0 投票
1 回答
203 浏览

java - Java Flight Recorder - 如何提取自定义事件字段的值?

Java Flight Recorder现在是 OpenJDK 11 的一部分,并提供自定义事件的使用。成功录制后,我想重用事件中的信息(尤其是我自己的自定义事件),但不知何故我无法读取事件的字段内容。我只能看到字段的注释、名称和类型。

有人知道这是否真的可能吗?

JFR 有一个消费者包,它允许您从文件中读取信息。我已经应用了一些功能。

我已经尝试过的

首先,我访问事件的所有字段:

然后我遍历字段并以几种不同的方式访问它们的值:

光看他们的名字,显然他们都不会给我内容。不幸的是,我找不到任何可以提供帮助的功能。

我也尝试过

我还尝试了一个非常直接的想法:以调试方式阅读内容。我认为它会给我一些关于如何以编程方式提取这些信息的见解。

不幸的是,JFR设法以某种方式对他们的记录进行编码,在调试过程中,人们无法读取信息,直到以编程方式提取它们并将其作为局部变量(例如:地图)。

供您参考,我一直在使用指令来实现自定义事件。

0 投票
1 回答
137 浏览

java - 如何检查哪个线程正在持有监视器?

我有一个性能问题(在使用并行集合和期货的复杂 Scala 代码中)。我已经使用 JFR 检查了更多细节,我可以看到问题表现为一个线程在等待监视器对象(线程似乎java.util.concurrent.ForkJoinTask#internalWait通过调用 的wait方法等待ForkJoinTask)。我想知道哪个线程持有这个监视器对象(以及从哪个函数/调用堆栈输入了监视器)。JFR 向我显示了某种监视器地址,但我没有找到按此地址搜索/过滤的方法。

在此处输入图像描述

JMC中是否有一些视图,插件或其他方式如何检查谁以及何时锁定和释放给定的监视器?

0 投票
0 回答
29 浏览

continuous-integration - CI/CD 平台上的 JDK 飞行记录器

我目前正在使用带有 JDK 11 的 JDK Flight Recorder,但在 CI/CD 平台中遇到了一些问题。不幸的是,新的 Flight Recorder 并没有太多的文档,而是在较旧的 Flight Recorder 上,它仍然是在 Java 下开发的。当我尝试直接从 IDE 开始测试时,一切正常,我得到了我的录音文件。当我尝试在 CI/CD 平台中自动执行相同的操作时,它会导致超时和许多不同的无限期失败,其中包括:创建文件时遇到问题,甚至没有写入文件等。

我使用的 JVM 命令如下(为了更好的可读性,我放置了额外的空格):

  • -XX:+FlightRecorder
  • -XX:StartFlightRecording= name="UiTestServer", settings="profile", dumponexit=true, filename=""+System.getenv("CI_PROJECT_DIR") + "flightRecording/javaFlightRecorder.jfr"

这些命令与 IDE 自动使用的命令相同,当右键单击指定的测试开始飞行记录时。

有人知道,飞行记录器是否存在与此类系统或可能与其并行运行的特定服务的问题?我听说过一些无法在 CI 平台上执行的分析工具。

如果您需要更多详细信息,请问我。不过,我可能无法说出与该项目有关的任何事情。

0 投票
1 回答
95 浏览

java - JFR 如何计算事件开始时间?

jcmd我正在使用工具分析带有 JFR 的应用程序。有时,当我生成 JFR 文件时,开始录制的时间比我开始录制的时间早得多。例如:

JFR 录音

我已经搜索了有关此问题的信息,但我刚刚找到了此链接:

https://blogs.oracle.com/poonam/clarifying-some-confusion-around-java-flight-recordings

正如这篇博文所述,我在 JMC 事件日志中搜索了事件,但在开始录制之前我没有找到任何事件。

所以我的问题是,JFR 如何计算“事件开始时间”?

我不知道它是否相关,但我还包括发送的命令jcmd

jcmd 1 JFR.start name=profile settings=profile maxage=10m

几分钟后,我将转储并停止录制:

jcmd 1 JFR.dump name=profile filename=/tmp/recording.jfr

jcmd 1 JFR.stop name=profile

非常感谢你的帮助!

0 投票
2 回答
48 浏览

java - 当我使用 Epsilon GC 时,我无法使用 Flight Recorder

我正在运行这个命令

代码运行,但 .jfr 文件为 0 字节。

当我删除-XX:+UseEpsilonGC并且 Java 默认为 G1 GC。代码运行,飞行记录器将所有数据转储到文件中,我可以读取它。

为什么当我使用 Epsilon 时文件为空以及如何修复它。

在 JDK 14 Windows 10 上。

0 投票
0 回答
393 浏览

java - 在 Java 11 上运行的 Java Mission Control 7 无法使用“jmx:remoting-jmx”协议连接到 Wildfly

据我所知,我在这里描述了同样的问题: https ://developer.jboss.org/thread/278895

(该论坛已关闭,不允许额外评论,他们的建议是发布到 SO)

我正在尝试在我的工作站上的 OpenJDK 64 位服务器 VM Corretto-11.0.8.10.1(构建 11.0.8+10-LTS,混合模式)上运行 JMC 7.1.2,并使用“jmx”连接到远程 Wildfly 服务器:remoting-jmx" 协议。这工作了多年,但 AFAICT 在 Java-11 和 JMC7 星座中不起作用。

没有关于未知协议或类似协议的错误(是的,我已经阅读并遵循以下说明: 将 Java Mission Control 连接到 Wildfly 16),但连接时出现此错误:

如果我将 OpenJDK 8 与 JMC 7 一起使用,那么它可以工作(也就是说,我可以连接并读取使用 jdk11 创建的 jfr 文件),但这真的是让这个配置工作的唯一方法吗?

0 投票
1 回答
98 浏览

java - JFR 文件一旦打印为 Json 是否可以编译回 .jfr 格式

我有使用该jfr print --json命令创建的 JSON 文件,我能否将它们转换回 .jfr 文件?