- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
这篇文章主要介绍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。
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
换句话说:你写了什么代码 不能 失败。我很想听听那些从事过心脏监测器、水测试、经济基本面、导弹轨迹或航天飞机上的 O2 浓度的项目的人的意见。 你是如何准备编写这种代码的:方法论、智力和情感? 编辑
开放式JDK中是否包含JMC二进制文件?我们的Linux平台中有openjdk-1.8.0.252,但是我们没有JMC吗? 我们可以将JMC安装为可在已安装的JVM上运行的单独应用程序吗?我们可以在生
数学类型如何以可搜索的格式表示,如文本? 我的意思是有一个工具栏,您可以输入数学符号并将它们作为文本进行搜索,因此该格式可以将数学符号表示为文本。 因为数学类型只能用图标表示,所以这样的任务是不可能实
我已经使用 Zulu Mission Control 安装了 Java Mission Control。但是,当我单击“安装新软件...”时,没有可用的软件。该列表为空。我不确定该怎么做。 最佳答案
当正在分析的应用程序将 XX:MaxJavaStackTraceDepth 系统属性设置为 -1 时,我在使用 Java Mission Control 时遇到问题。 重现: 启动 java 应用程序
我想分析我的类(class),它就像一个缓冲区,我可以在其中保存用户数据并在之后获取它。我已经创建了 main 方法并在那里无限循环地运行测试方法。 public void test(){
我无法使用 Java Mission Control 连接到远程 VM。我可以使用 VisualVM 相对轻松地进行连接。我想使用 Mission Control 的原因是由于 VisualVM 的一
我正在尝试使用 JMC 分析 Clojure 应用程序,但是当我尝试启动飞行记录器时出现以下异常: java.lang.UnsupportedOperationException: This pars
我在 MacOS Sierra 10.12 上运行。必须替换一些 jar 文件才能使 UI 正常工作,现在我没有看到面板中列出任何 JVM。试图关注https://community.oracle.c
Jave 任务控制有一些很棒的特性。例如,可以看到应用程序的“热门方法”,或者当可以找到最常用的函数调用层次结构时,可以看到“调用树”部分。但我想知道,当您有兴趣寻找性能瓶颈(在时间方面)时,是否真的
在启用所有异常跟踪的情况下执行“飞行记录”时,我发现 JMC 存在令人不快的行为。 录制到面板后: 代码 -> 异常 事件 -> 直方图 -> “事件类型”为“Java 应用程序/Java 异常”,“
我可以看到各种方法所花费的 CPU 时间,并且可以看到套接字 I/O 所花费的时间。我发现应用程序在套接字读取方面遇到瓶颈。 但是我在哪里可以看到哪些方法正在执行所有 I/O? 最佳答案 对于 JMC
是否可以使用飞行记录器记录 mbean 值?当我在 mbean 模式下监视我的服务器时,我绘制了 java.lang.management.OperatingSystemMXBean.getSyste
问题: Bob 计划工作 n 天,每天 i 都有一个任务;每个任务只持续一天,必须在指定任务的第 i 天完成,并支付给 bob x_i 美元。 Bob 一次不能完成 5 个以上的连续任务。也就是说,他
这篇文章主要介绍Java Flight Recorder(JFR)和 Java Mission Control (JMC)组件。在本文结束时,你将能够监控、收集诊断数据并对任何正在运行的Java应用程
一、写在前面 上一篇文章 我们介绍了性能监控的一些命令,包括 jmap (生成堆存储快照)和 jstack(生成线程快照),事实上,在没有一些监控工具之前,我们用的最多的也是这两个命令来进行虚拟机性
有人问了类似的问题 here . 我正在使用根据 instructions 构建的 JMC 7.1.0 分析 Open JDK 11.0.2 应用程序. 该应用程序使用了大约 3 个内核,没有过多的
我正在构建一个 Electron 应用程序,但我不希望我的应用程序出现在 macOS Mission Control 中。有没有办法在 Mission Control 启动时隐藏窗口? 最佳答案 我能
我正在研究 Oracle Java Mission Control 来进行内存消耗调查。首先,我使用了 JDK 8 示例中提供的飞行记录 wldf.jfr。我对 Total TLAB Size 与 T
我是一名优秀的程序员,十分优秀!