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.target
files中将端口从8080更改为9999(不是100%哪个被使用)以上是关于JMC Java Flight Recorder 未启用的主要内容,如果未能解决你的问题,请参考以下文章
jdk11新特性——Java Flight Recorder
Java Flight Recorder - 查找文件描述符泄漏
内置 JFR(Java Flight Recorder)事件记录在哪里?
Java Flight Recorder - Live Objects 选项卡为空