本文介绍在Fedora 29系统下安装JDK Mission Control(JMC),作为Fedora 29中的模块使用,JMC需要JDK 8或更高版本,是JVM的一部分,可在OpenJDK 11或Oracle JDK 7u4或更高版本中使用,当前已开源,请看Java性能监控调试工具JMC宣布开源一文。本文是在Fedora 29 Workstation下安装和运行JMC的。
在Fedora 29下安装JMC 使用Java 11将允许JMC为自己记录JFR数据,通过以下方式安装Java 11: $ sudo dnf install java-11-openjdk 通过以下方式启用并安装具有默认配置文件的JMC模块: $ sudo dnf module install jmc:latest/default 通过以下方式运行针对Java 11 JRE的JMC: $ jmc -vm /usr/lib/jvm/jre-11/bin 参考:在CentOS 7/Fedora 29系统上安装Java 11的方法。
使用JMC和JFR来探索hot methods JDK Mission Control可用于深入分析Java应用程序,在这个例子中,我们将看一下hot methods,Hot methods是在执行期间花费大量时间的methods,在尝试减少总体执行时间时,这些是开始调查的好地方。 为了演示,这里是Java应用程序的一部分代码:
实际上,在JDK Mission Control中有多种分析Java应用程序的methods,例如,你可以在启用Flight Recording的情况下运行应用程序,并在JVM出口上设置为dump,这将在应用程序退出时生成Flight Recording(.jfr)文件,该文件可由JDK Mission Control打开,请注意,Flight Recorder可在OpenJDK 11+和OracleJDK 7u4+中使用。 例如,对于OpenJDK 11+,使用此命令运行Flight Recorder类: $ java -XX:+FlightRecorder -XX:StartFlightRecording=dumponexit=true,filename=initiator.jfr Initiator 应用程序完成执行后,使用JMC打开生成的Flight Recording,以下是自动分析结果:
automated Method分析已经指示对Integer.equals(Object)的调用中的潜在优化区域,转到Method Profiling选项卡,选择该Method并检查堆栈跟踪,如下所示:
在此堆栈跟踪中,你可以跟随对method Initiator.countIntersection(Initiator)的调用,检查Initiator类,如下所示,请注意,使用HashSet集合而不是LinkedLists集合可以更好地计算两个Integer集合之间的交叉点:
进行此更改后,你可以在后续的Flight Recording中看到执行情况的改进:
通过Fedora 29中的JMC模块试一试,JDK Mission Control和JDK Flight Recorder为你提供了Java应用程序行为的详细视图,你可以使用它来诊断hot methods、deadlocks、lock contention、memory leaks等问题。
相关主题 |