知识库

如何启用 Java Flight Recorder 并查看结果

Java Flight Recorder 可用于捕获 Java 进程的底层 Java 属性和运行时数据,例如 Neo4j。

The Java Flight Recorder (JFR) is a commercial feature. You can use it for free on developer desktops/laptops, and for
evaluation purposes in test, development, and production environments. However, to enable JFR on a production server,
you require a commercial license. Using JMC UI for other purposes on the JDK does not require a commercial license.

可以通过在 Java 应用启动时配置 JVM 选项,或使用 jcmd 工具对正在运行的 Java 应用进行操作来激活 JFR。可用的命令和选项取决于所使用的、与 Neo4j 版本相匹配的 JVM。JMC 文档 此处 链接了各个 JDK 版本的文档示例,当需要额外选项时可能会有帮助。

要在 Neo4j 服务启动时启用 Java Flight Recorder,需要将以下 JVM 选项添加到 neo4j.conf,随后重新启动 Neo4j 使更改生效。后文讨论的 JFR.dump 命令可用于在启用后转储内容。

针对 3.x

dbms.jvm.additional=-XX:+UnlockCommercialFeatures
dbms.jvm.additional=-XX:+FlightRecorder
dbms.jvm.additional=-XX:FlightRecorderOptions=defaultrecording=true,settings=profile

针对 4.x

dbms.jvm.additional=-XX:StartFlightRecording=settings=profile

针对 5.x

server.jvm.additional=-XX:StartFlightRecording=settings=profile

要开始基于时间的录制,在命令行运行

$ $JAVA_HOME/jcmd <pid> JFR.start duration=3600s filename=myrecording.jfr settings=/usr/lib/jvm/java-8-oracle/jre/lib/jfr/profile.jfc

替换为 Neo4j 进程的 Linux pid(例如 ps -eaf | grep java)。

加入 duration=3600s 应会产生持续 1 小时的录制,并在 1 小时运行结束时写入该文件。

上文中对 filename=myrecording.jfr 的引用指明了输出文件的名称。如果未定义路径,生成的文件将保存在 $NEO4J_HOME。也可以使用完整路径,例如 filename=/tmp/myrecording.jfr

另外,profile.jfc 的位置可能因您的安装而位于不同的目录/路径。默认位置在 $JRE_HOME/lib/jfr

如果您不知道要运行多长时间的录制,因为问题可能是间歇性的,请运行

$ $JAVA_HOME/jcmd <pid> JFR.start settings=/usr/lib/jvm/java-8-oracle/jre/lib/jfr/profile.jfc

它将报告

3962:
Started recording 1. No limit (duration/maxsize/maxage) in use.

Use JFR.dump recording=1 filename=FILEPATH to copy recording data to file.

随后将录制转储到文件,运行

$ jcmd <pid> JFR.dump recording=<recording #> filename=<filename>

随后完全停止录制,虽然这不会将录制内容转储到文件,运行

$ jcmd <pid> JFR.stop recording=<recording #>

(注意:在 Neo4j 4.x 和 5.x 所使用的 JDK 版本中,上述命令中的 recording= 选项已不再使用,可改为使用 name= 。)

要查看结果,请启动 Java Mission Control($JAVA/HOME/jmc)。这将按照下面的说明启动一个 Java 应用。请注意,如果您是通过 Putty 或 Telnet 客户端连接,可能无法启动。可以改用 MobaXterm

生成的 Java Flight Recorder 文件可以使用 Java Mission Control 进行分析。启动 Java Mission Control 请运行 $JAVA_HOME/jmc。启动后,使用 “File / Open File” 菜单即可浏览并打开该飞行记录文件。

image

© . This site is unofficial and not affiliated with Neo4j, Inc.