JMC Java Flight Recorder 未启用

Posted

技术标签:

【中文标题】JMC Java Flight Recorder 未启用【英文标题】:JMC Java Flight Recorder not enabled 【发布时间】:2019-03-12 07:40:16 【问题描述】:

我正在使用带有 java 任务控制插件的 spring 工具套件来启动我想使用 JFR 监控的应用程序。我将-XX:+UnlockCommercialFeatures -XX:+FlightRecorder 添加到SpringToolSuite4.ini 中,并在要监视的应用程序的运行配置> 参数> VM 参数中使用这两个标志(如果我理解正确,这两个标志都不需要)和-XX:+FlightRecorder 设置JAVA_OPTS。将这两个标志同时添加到运行配置时,应用程序无法使用 openJdk 启动。

在选择 Flight Recorder 时在 JVM 浏览器中启动应用程序后,出现以下异常。

java.lang.RuntimeException: Flight Recorder features are not enabled. To enable this you need to use a Java 7u4 or later JVM started with -XX:+UnlockCommercialFeatures -XX:+FlightRecorder.
    at com.oracle.jmc.flightrecorder.controlpanel.ui.FlightRecorderProvider.refresh(FlightRecorderProvider.java:105)
    at com.oracle.jmc.browser.views.JVMBrowserView$1.run(JVMBrowserView.java:98)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
    at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: com.oracle.jmc.rjmx.services.jfr.FlightRecorderException: Flight Recorder features are not enabled. To enable this you need to use a Java 7u4 or later JVM started with -XX:+UnlockCommercialFeatures -XX:+FlightRecorder.
    at com.oracle.jmc.flightrecorder.controlpanel.ui.FlightRecorderProvider.getService(FlightRecorderProvider.java:161)
    at com.oracle.jmc.flightrecorder.controlpanel.ui.FlightRecorderProvider.refreshRecordings(FlightRecorderProvider.java:117)
    at com.oracle.jmc.flightrecorder.controlpanel.ui.FlightRecorderProvider.refresh(FlightRecorderProvider.java:94)
    ... 7 more

我尝试了以下 java 版本。

$ java -version
openjdk version "11.0.2" 2018-10-16
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.2+7)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.2+7, mixed mode)

或者使用 oracle 的 JDK

$ java -version
java version "11.0.2" 2019-01-15 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.2+9-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.2+9-LTS, mixed mode)

对于上面提到的 JDK,没有一个 jmc.exe,它与 java 8 一起存在。那是插件的一部分吗?

我怎样才能让它运行?

【问题讨论】:

【参考方案1】:

IIRC,Java 11 需要 JMC 7 才能启动和查看记录。 JMC 7 EA 版本预计很快就会出现在这里 - https://jdk.java.net/jmc/

与此同时,您可以自己构建 JMC,请参阅 http://hg.openjdk.java.net/jmc/jmc7/(或 github,不确定它同步到哪个版本 - https://github.com/JDKMissionControl/jmc)以及有关如何构建的 README。

您可以使用 JVM 命令行标志和 jcmd 开始记录,并使用 https://docs.oracle.com/en/java/javase/11/docs/api/jdk.jfr/jdk/jfr/consumer/package-summary.html 解析记录

【讨论】:

谢谢。试图建造,但由于java.net.BindException: Address already in use: bind,码头没有启动。没有正在运行的服务器 - 关闭了所有其他应用程序。我在哪里可以配置端口?您的答案中的最后一个链接 (...package-summary.html) 不存在。 不知道许可证,但您可以同时查看 Azul 的二进制文件 azul.com/products/zulu-mission-control。它们支持最新的文件格式等。 对于端口:将<connector> <port>9999</port> </connector>添加到releng/third-party/pom.xml中jetty-maven-plugin的配置中,然后在releng/platform-definitions/platfoprm-definition-xyz.targetfiles中将端口从8080更改为9999(不是100%哪个被使用)

以上是关于JMC Java Flight Recorder 未启用的主要内容,如果未能解决你的问题,请参考以下文章

jdk11新特性——Java Flight Recorder

Java Flight Recorder - 查找文件描述符泄漏

内置 JFR(Java Flight Recorder)事件记录在哪里?

Java Flight Recorder - Live Objects 选项卡为空

如何在 Java Flight Recorder 采样中包含 IO 绑定方法?

Java Mission Control Flight Recorder 中没有记录 CPU 使用情况