这篇文章主要介绍Java Flight Recorder(JFR)和 Java Mission Control (JMC)组件。在本文结束时,你将能够监控、收集诊断数据并对任何正在运行的Java应用程序进行剖析。
首先,为什么我们需要另一个工具来监控 Java ?事实上,已经有几个选项可用于监控 Java 应用程序。你们中的许多人已经了解 VisualVM(请参阅本文了解更多信息:使用 VisualVM 监控 WildFly)和 JConsole(使用 JConsole 监控远程 WildFly 服务器)。
JDK Flight Recorder 是 Java 虚拟机 (JVM) 代码中附带的性能/诊断工具。以前作为 JRockit 的商业功能提供,您现在可以在常见的 OpenJDK 发行版中运行它,例如 OpenJDK 11。
在某种程度上,Java Flight Recorder 类似于 VisuaVM 或 JConsole 等典型的 Java 分析器。不过也有一些优势。
激活 Java Flight Recorder 的最简单方法是在启动时添加 JVM 选项 -XX:StartFlightRecording。例如,如果你想把它添加到 WildFly 应用服务器或 JBoss EAP,在 standalone.conf 文件中包含这个选项:
JAVA_OPTS="$JAVA_OPTS -XX:StartFlightRecording=duration=200s,filename=record.jfr"
在上面的命令中,我们在文件 record.jfr 中记录了 200 秒的数据。
另一方面,您也可以使用 jcmd 工具在正在运行的 Java 进程上激活 JFR 工具。除了进程 ID (PID) 之外,您还需要提供要执行的操作。
要开始飞行记录,请使用 JFR.start 诊断命令。例如,以下命令启动名为 monitor2hour 的记录,该记录最多保留 2 小时的数据,并将记录的大小限制为 250 兆字节。
$ jcmd pid JFR.start name=monitor2hour maxage=2h maxsize=250M
要在飞行记录运行时将数据写入文件,请使用 JFR.dump 诊断命令,如下所示:。
$ jcmd pid JFR.dump name=monitor2hour filename=monitor-dump.jfr
最后,使用 JFR.stop 命令停止记录诊断数据:
$ jcmd pid JFR.stop name=monitor2hour filename=debugrun1.jfr
JBang 是一个用于创建、编辑和运行自包含源 Java 程序的工具。您可以在此处阅读更多相关信息:JBang:像专业人士一样创建 Java 脚本
您可以在 JBang 脚本上应用 Flight Recorder,如下所示:
jbang --jfr application.java
默认情况下 –jfr 将启动飞行记录器转储事件记录到文件 application.jfr(因此使用脚本的基本名称作为其文件名)。
到目前为止,我们使用 **Java Flight Recorder 获得了记录器诊断数据。接下来,我们需要检查这些数据。为此,您可以使用 Java Mission Control Tool (JMC),它是一套用于 OpenJDK/Oracle JDK 的工具。
可以在 github 上找到 JMC 项目:https://github.com/openjdk/jmc
另一方面,一些操作系统(例如 RHEL 8)提供 jmc 工具作为其模块流的一部分。 JMC 还包含在适用于 Windows 的 OpenJDK 开发人员构建中。在本文中,我将通过三个简单的步骤向您展示如何在 Fedora 机器上安装 JMC:
// enable the copr repo
$ dnf copr enable almac/jmc8
// install jmc
$ sudo dnf install jmc
然后启动 jmc 命令以启动 Java Mission Control:
jmc
一旦开始,选择文件|打开文件 打开您的 JFR 文件。第一站是 Automated Analysis Results,其中包含每个问题(0 到 100)的 score 检测到的主要问题列表:
从这个角度来看,几个问题已经很明显了:
这些热点将在 Java 应用程序树中突出显示(带有橙色的“i”图标)。
JMC 用户界面的左侧包含一组指标,这些指标分为三个主要类别:
让我们更详细地了解 Java 应用程序 分支。
在 Java 应用程序 树视图中,您将找到所有区域的子集,包括线程、内存、锁实例、文件 I/O、套接字 I/O、方法分析、异常和线程转储。
如前所述,具有异常数据的子集显示 (i) 橙色图标。例如,Memory 元素显示了明显的内存使用问题(内存泄漏)。在 Stack Trace 下部选项卡中,您将能够指向有问题的方法:
另一个常见的分析元素是方法分析:它会告诉你热点在你的应用程序方法中的位置。例如,如果您遇到 CPU 密集型问题,方法分析信息将告诉您在哪里进行优化以使事情进展得更快。
在此 UI 的下部,您将找到每个事件的 Stack Trace 和 Flame View。
Flame View 提供更快的理解并缩短根本原因分析的时间。以下是如何阅读它:
然后,如果您的应用程序抛出大量 Exceptions,请切换到 Exceptions 视图。这将为您提供有关记录期间引发的异常数量以及它们的堆栈跟踪和详细信息的统计信息。浏览“概览”选项卡并检查您是否看到:
结论
本文是对 Java Flight Recorder 和 Java Mission Control 进行了介绍,它允许从任何角度监视和分析任何类型的 Java 应用程序。在下一篇文章中,我们将学习如何从 Eclipse 启动 Java Mission control。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : http://www.mastertheboss.com/java/how-to-use-java-mission-control-to-monitor-java-apps/
内容来源于网络,如有侵权,请联系作者删除!