VisualVM中的JDK Flight Recorder支持 - Jiří Sedláček

19-10-12 banq
         

JDK Flight Recorder支持的预览版已作为与GraalVM 19.2捆绑在一起的VisualVM工具的插件发布。该插件读取从Java 7和更高版本创建的所有JFR快照,并以工具用户熟悉的典型VisualVM视图显示数据。

JDK Flight Recorder(JFR,以前是Java Flight Recorder)是用于收集有关正在运行的Java应用程序的诊断和性能分析数据的工具。它已集成到Java虚拟机(JVM)中,几乎没有性能开销,因此,即使在负载很大的生产环境中也可以使用它。

界面功能描述:

  • 概述选项卡Overview tab 显示有关记录的进程的基本信息,例如其主类,参数,JVM版本和配置以及系统属性。此选项卡还提供对记录的线程转储的访问。
  • “监视器”选项卡Monitor tab 显示进程的正常运行时间和基本遥测-CPU使用率,堆和元空间利用率,已加载类的数量以及活动和启动的线程数。
  • “线程”选项卡Threads tab基于记录配置,根据快照中记录的所有事件尽可能精确地重建线程时间线。
  • “锁定”选项卡Locks tab允许分析线程同步。
  • “文件IO”选项卡显示有关对文件系统的读写事件的信息。
  • 套接字Socket IO选项卡显示有关对网络的读写事件的信息。
  • “采样器Sampler ”选项卡显示每个线程的CPU使用率和内存分配,以及堆直方图。还有一个实验功能“ CPU采样器”,可从记录的事件中构建CPU快照。它没有提供精确的性能分析,但仍有助于了解记录的应用程序中发生了什么以及CPU瓶颈可能在哪里。
  • “浏览器Browser ”选项卡提供了快照中记录的所有事件的通用浏览器。
  • “环境Environment ”选项卡概述了记录机器的设置和条件,例如CPU型号,内存大小,操作系统版本,CPU利用率,内存使用率等。
  • 记录Recording选项卡列出了记录设置和基本快照遥测,例如事件数,总记录时间等。

预览版中不提供某些高级功能,如分析JVM内部,显示事件堆栈跟踪或支持从实时进程创建JFR快照,这些功能将在预览版本中逐步解决。

要安装JFR支持,请从https://www.graalvm.org下载GraalVM 19.2或更高版本,安装并运行<GRAALVM_HOME>/bin/jvisualvm以启动VisualVM。使用工具| 插件| 可用插件列出所有可用插件并安装VisualVM-JFR和VisualVM-JFR-Generic模块。可以使用文件|文件管理器打开JFR快照。加载...操作或通过双击“ JFR快照”节点并将快照永久添加到JFR存储库中。

请按照您的Java版本的文档来创建JFR快照。对于GraalVM Enterprise,可以通过在java命令中添加以下参数来创建JFR快照:

<GRAALVM_HOME>/bin/java -XX:+UnlockCommercialFeatures 
-XX:StartFlightRecording=duration=10s,filename=filename.jfr -jar ...

请注意,由于底层的OpenJDK 8不支持在GraalVM 19.2 CE中创建JFR快照,因此不可用。您可以使用OpenJDK 11和更高版本来创建JFR快照:

<OPENJDK11_HOME>/bin/java -XX:StartFlightRecording=duration=10s,filename=filename.jfr -jar ...

如果您想在Java应用程序上对其进行测试,但没有自己喜欢的工具,可以尝试使用Spring Petclinic示例Web应用程序

git clone https://github.com/spring-projects/spring-petclinic.git
mvn clean package -DskipTests=true
# verify it works: 
<GRAALVM_HOME>/bin/java -jar target/spring-petclinic-2.1.0.BUILD-SNAPSHOT.jar

这将启动示例应用程序,并使其在localhost:8080上可用。

现在,您只需要在命令中添加上面的命令行选项,javaFlight Recorder就会收集分析信息。

<GRAALVM_HOME>/bin/java -XX:+UnlockCommercialFeatures -XX:StartFlightRecording=dumponexit=true,filename=petclinic.jfr -jar target/spring-petclinic-2.1.0.BUILD-SNAPSHOT.jar

请注意在dumponexit=true应用程序运行结束时用于填充文件的命令,另一种选择是指定记录的持续时间。

打开应用程序并单击,或者如果您有负载生成工具(例如wrk),则可以使用它来生成示例工作负载以获取更有意义的配置文件。例如,以下命令将对正在运行的应用程序中的网页之一施加负载30秒。

wrk -d30s -R2000 http://localhost:8080/owners\?lastName\=

停止应用程序,确认petclinic.jfr文件存在,然后如上所述将其加载到VisualVM中。

您现在可以从VisualVM调查JFR记录有关您的应用程序的日期。

请注意,JFR记录是进行性能分析的最佳工具之一,如果您希望GraalVM Enterprise更好地处理工作负载,则可以与GraalVM团队联系,例如在GitHub上,我们将尝试调查是否有优化的机会。

感谢您对VisualVM中的JFR支持的反馈-请让我们知道您希望在下一版本中看到哪些功能!将您的评论留在本文下方或http://visualvm.github.io/feedback.html,或在https://github.com/oracle/visualvm/issues提交RFE / bug 。

点击标题见原文图