当前位置: 首页 > news >正文

JDKMissionControl官方用户指南--人工翻译

1. JMC8新增功能

暂时用不到,暂略

2. JDK Mission Control是什么

JMC是一组高级工具,用于管理、监视、分析Java应用程序并排除其故障。JMC能够对代码性能、内存和延迟等领域进行高效而详细的数据分析,而不会引入通常与分析和监控工具相关的性能开销。

JMC非常小的性能开销是它与HotSpot虚拟机紧密集成的结果。JMC的功能总是按需提供的,而且其性能开销只有在工具运行时才会出现。这种方法还消除了当监控工具改变系统的执行特性时出现的观测器效应问题。JMC使您能够解决问题并确定根本原因和瓶颈。这些特性使JMC工具非常适合于在生产中运行的应用程序。

JMC由以下客户端应用程序和插件组成:

  • JVM浏览器显示正在运行的Java应用程序及其JVM。

  • JMX控制台是一种用于监视和管理JVM的机制。它连接到正在运行的JVM,实时收集和显示其特征,并允许您通过Managed Beans(MBean)更改其一些运行时特性。您还可以创建触发某些事件的规则(例如,如果应用程序的CPU使用率达到90%,则发送电子邮件)。

  • **Java飞行记录器(JFR)**是一种用于收集有关正在运行的Java应用程序的诊断和分析数据的工具。它集成到JVM中,只有非常小的性能开销,因此可以在生产环境中使用。JFR不断地保存关于正在运行的应用程序的大量数据。分析信息:包括线程、锁和垃圾收集详细信息。诊断信息:JFR在逻辑分组的表格和图表中显示诊断信息。它使您能够选择关注问题所需的时间范围和详细程度。当联系Oracle支持人员以帮助诊断Java应用程序的问题时,JFR收集的数据可能是必不可少的。

  • jcmd命令行工具用于向JVM发送诊断命令请求。这些请求对于管理JFR的记录、故障排除以及诊断JVM和Java应用程序非常有用。

  • 插件有助于进行堆转储分析和DTrace记录。请参见插件详细信息。JMC插件使用JMX代理连接到JVM。有关JMX的更多信息,请参阅JMX技术主页。

3. JMC及其插件安装

暂略

4. JMC应用程序GUI

当您第一次启动JMC应用程序时,默认情况下会打开许多视图。

您可以打开窗口菜单,选择显示视图,然后选择其他以打开一个列出所有可用视图的窗口。选择必要的视图,然后单击确定以打开它们。以下视图可用:

  • JVM浏览器:列出本地运行的所有JVM实例(在主机上)和在网络上发现的JVM。JVM浏览器可以以两种不同的模式查看:一种是平面列表,另一种是树(默认情况下可见)。
  • 概述:显示在JFR中收集的数据。它将JFR数据组织并显示为树中的页面,以便于导航(默认情况下可见)。
  • 进度视图:显示运行操作的进度,例如JFR。
  • 属性 :列出在表中选择的项目的属性,包括未在表中显示的隐藏属性(默认情况下可见)。
  • 结果:显示规则及其相应分数的列表(默认情况下可见)。它还显示了与编辑器中当前打开的页面相关的自动分析的结果。
  • 堆栈跟踪:显示已记录事件的堆栈跟踪(默认情况下可见)。

可以通过将这些视图拖放到所需位置来重新排列这些视图。您还可以最大化和最小化视图。

5. JMC对远程JVM的应用

允许您通过以下方式连接到远程运行的Java应用程序或JVM:

  • JMX(Java Management Extension),Java管理扩展
  • JDP(Java Discovery Protocol),Java发现协议

5.1 JMX(Java Management Extension)

JVM使用JMX技术通过一个远程方法调用连接器(RMI:Remote Method Invocation),也就是JMXRMI去实现监控和管理功能

先决条件:

  • 要从JMC连接到Java应用程序(远程JVM),必须使用JMX JVM参数启动远程JVM,例如:

    • -Dcom.sun.management.jmxremote

    • -Dcom.sun.management.jmxremote.authenticate

    • -Dcom.sun.management.jmxremote.port

    • -Dcom.sun.management.jmxremote.ssl

  • 了解完整的参数和参数值,请看使用JMX技术进行监控和管理

  • 确保JMC运行所在的服务器或客户端上没有防火墙规则,这会阻止与JMX远程端口的连接。

  • 获取配置详细信息,如端口号、主机名、身份验证凭据和远程JVM的数字证书(如果有的话)

在启用远程监控和管理时,SSL是默认打开的。要使用SSL,你需要在系统上设置一个数字证书并且在服务器应用或JVM上配置SSL

在远程JVM上启用SSL后,使用远程JVM中使用的同一组数字证书来配置JMC。

在JMC中设置数字证书

  1. 转到窗口首选项JMC、然后点击JMXRMI
  2. 浏览并选择密钥存储位置
  3. 输入密钥存储密码
  4. 浏览并选择信任存储位置
  5. 输入信任存储密码
  6. 点击解锁来提供主密码
  7. 在设置主密码的页面,输入两次密码并点击确定
  8. 点击应用
  9. 重启JMC

创建新的自定义连接:

你可以添加连接到常用JVM列表中,以便它们在JVM浏览器中始终可用,要创建新的自定义连接,操作为:

  1. 右键单击JVM浏览器选项卡然后选择新的连接,或者转到文件、连接、选择创建一个新的连接,然后点击下一步
  2. 输入要连接的JVM的主机名和端口号,或者,您可以提供以下格式的自定义JMX服务URL:
service:jmx:rmi:///jndi/rmi://<<remote-host>>:7091/jmxrmi
  1. 如果在远程JVM中启用了客户端身份验证,请指定用于身份验证的用户名和密码。选择将凭据存储在设置文件中以使用主密码对其进行加密。
  2. 输入连接名称
  3. 点击结束以创建此连接。或者,点击下一步,然后选择启动JMX控制台或启动JFR。

注意:如果未启用SSL,则会显示一条警告消息,建议您使用SSL配置保护连接。

5.2 JDP(Java Discovery Protocol)

JDP可以使JVM浏览器能够列出同一子网中的JVM实例

先决条件:

  • 使用JDP参数从JMC连接到Java应用程序(远程JVM)。 有关更多详细信息,请参阅JDP文档。
  • 确保服务器或客户端(运行JMC的机器)上没有阻止连接的防火墙规则

设置JDP首选项:

  1. 转到窗口首选项JMCJVM浏览器,然后点击JDP
  2. 勾选自动发现选项。 当系统提示在安全环境中启用自动发现时,点击确定
  3. 输入要加入的多播组的IP地址。默认值为224.0.23.178。
  4. 输入多播端口号。默认值为7095。
  5. 输入心跳超时时间(以秒为单位),默认值为12。
  6. 重新启动JMC以使更改生效。

在配置的网络上运行并且支持JDP的JVM,将被JMC识别,并允许您监视和记录JFR。

6. JMC对远程JVM的应用

Java管理控制台(JMX)连接到正在运行的JVM,并实时收集和显示关键特性。它是一个用于监视和管理正在运行的JVM实例的工具。该工具提供有关内存和CPU使用情况、垃圾收集、线程活动等的实时数据。它还包括一个功能齐全的JMX MBean浏览器,您可以使用它来监视和管理JVM和Java应用程序中的MBean。

6.1概览选项卡

要启动JMX控制台,请右键单击 JVM浏览器并选择启动JMX控制台.

默认情况下,JMX控制台显示概述选项卡以及JMX数据持久性设置仪表盘面板,它还显示处理器内存图表。

仪表板上的默认刻度盘显示有关内存利用率、JVM中CPU使用率以及活动集和碎片的信息。

概览选项卡允许您添加、删除和编辑表盘和图表。

增加或修改一个表盘:单击“概览”选项卡旁边的加号按钮添加图表。添加图表后,单击图表面板右上角的添加属性按钮以添加所需属性。例如,当对话框打开时,在筛选器文本框中,输入线程号,然后单击结束。一个线程计数图表被添加到页面中。您可以右键单击属性列表,然后选择编辑颜色来更改线程计数图表的颜色。要对图表执行其他操作,如更改标题或将其导出为图像,请使用图表的上下文菜单。

注意:要重置“概述”选项卡,请单击页面右上角的“重置为默认控件”按钮。

6.2 JMX数据持久性

您可以使用JMX属性来收集持久性数据并将其存储以供分析。JMC将JMX数据持久化到可以在GUI中打开和查看的文件中。

启用数据持久性

JMX数据持久性设置面板折叠在概览选项卡的顶部。要为列表中的属性启用数据持久性,请单击概览选项卡右上角的启用JMX数据持久性按钮。

向设置添加更多属性

要向列表中添加属性,请单击JMX数据持久性设置面板右上角的添加属性按钮。从“选择要添加的属性”对话框中选择一个属性,然后单击“完成”。

注意:要从列表中删除属性,请右键单击该列表,然后选择“删除”。

查看JMX数据持久性文件

JMX数据持久性的数据存储在持久性目录中的二进制文件中。默认情况下,此目录位于USER-HOME/.jmc/7.x.x/persisted_jmx_data中。持久性目录包含与启用数据持久性的JVM连接的名称相对应的文件夹。每个JVM连接文件夹都包含子文件夹,这些子文件夹具有已启用数据持久性的属性的名称。这些子文件夹包含名为*.persisted_jmx_data的日志文件和名为series.info的其他元数据文件。您可以将日志文件拖放到JMX数据持久性窗口以查看它们。

注意:您可以更改持久性目录。 对于Windows操作系统,打开JMC应用程序,依次选择Windows、Preferences、JDK Mission Control、JMX Console,然后选择JMX Data Persistence。浏览以选择所需的目录并应用更改。

6.3 MBean浏览器选项卡

MBean浏览器选项卡允许您监视和管理部署在JVM内的JMX服务器和Java应用程序中的MBean。 浏览器提供对所有注册的MBean的访问。MBean可以表示设备、应用程序或任何需要管理的资源。为了使您更容易查看大量属性集合,浏览器将自动将值分组到子组中。您可以通过更改首选项来控制此分组。

您可以使用MBean浏览器查看属性的特定值、更改属性的更新间隔、将属性添加到图表以及查看通知。

创建并注册一个新的Mbean

要创建和注册新的MBean,请单击MBean树面板顶部的加号(+)按钮,并在动态创建和注册一个新MBean对话框中为新MBean指定有效的对象名和类名。要注销特定的MBean,请右键单击并从MBean树面板上下文菜单中选择“注销”。

属性的更新间隔

要更新“属性”表中某个属性的间隔,请右键单击某个属性,然后选择“更改更新间隔”。更新间隔可以设置为以下值之一:

  1. 默认值:默认的更新间隔设置。
  2. 单次:属性将只被提取一次。例如,您可以选择此时间间隔作为操作系统的名称。
  3. 自定义:以毫秒(ms)为单位指定的自定义更新间隔。例如,您可以将CpuLoad属性更改为2000毫秒。在这种情况下,CPU负载将每两秒钟提取一次。

更改属性的值

只有以粗体显示的属性的值才能更新。例如,选择MemoryPool,然后选择Compresss Class Space MBean,然后转到属性子选项卡。在列表中,右键单击UsageThreshold属性(请注意,该属性为粗体)。您可以双击字段,也可以右键单击并选择更改值来更改阈值。

使属性可视化

要在“概述”选项卡中将属性可视化为图表,请执行以下步骤:

  1. 从“MBean树”面板中选择任何属性。例如,从java.lang中选择Threading。

  2. 在MBean 属性面板中,右键单击ThreadCount,然后选择可视化

  3. 创建图表对话框中,单击添加图表,然后输入图表的新名称。

  4. 单击确定线程计数图表将添加到概述选项卡中。

注意:如果属性具有布尔值,则无法将其可视化为图表。

查看通知

通知子选项卡使您能够查看指定MBean上可用的JMX通知。并不是所有的MBean都提供这样的信息,您必须订阅通知(如果它们可用的话)。例如,在java.lang下选择GarbageCollector MBean,然后选择G1 Old Generation。转到通知子选项卡,勾选订阅。通知被添加到日志面板中,作为带有名称的表的单独条目,该名称包括通知的日期和时间。展开条目以查看通知的详细信息。

调用诊断命令

您可以使用MBean浏览器选项卡来调用诊断命令。例如,单击操作子选项卡,然后从com.sun.management域中选择诊断命令。从命令列表中,选择vmInfo:String命令,然后单击执行。结果显示在输出面板中。

6.4 Trigger触发器选项卡

触发器选项卡使您能够定义和激活在满足特定条件时触发事件的规则

规则由以下组成部分组成:

  1. 条件:指定何时激活触发器。例如,当CPU负载超过90%时,激活触发器。
  2. 操作:指定在满足条件时要执行的操作。例如,发送一封包含详细信息的电子邮件或开启JFR。
  3. 约束:对触发条件的附加约束。例如,仅在工作日发送触发警报。

触发器选项卡允许您添加、删除、重命名、激活和停用规则。您可以导出和导入规则。触发规则面板包含一些预定义的规则。您可以在规则详细信息面板中对这些现有规则进行修改。

设置一个触发器:

按照以下说明设置JMC,以便在满足条件时自动启动JFR。这对于跟踪特定的JVM运行时问题非常有用。

  1. 在触发器选项卡中,单击添加按钮。您可以在应用程序中选择任何MBean,包括您自己的特定于应用程序的MBean。
  2. 在打开的“添加新规则”对话框中,选择规则应触发的属性,然后单击“下一步”。例如,选择java.lang,然后选择OperatingSystem,然后选择ProcessCpuLoad。
  3. 设置规则应该触发的条件,然后单击“下一步”。例如,设置“最大触发值”、“持续时间段”和“限制时间段”的值。

注意:您可以选择条件满足时触发和从条件恢复时触发复选框。

  1. 选择您希望规则在触发时执行的操作,然后单击“下一步”。例如,选择“开始限时JFR”,然后浏览文件目的地和记录时间。如果您希望在触发时自动打开航班记录,请选中“自动打开”复选框。
  2. 选择规则的约束条件,然后单击“下一步”。例如,选择规则应处于活动状态的特定日期、一周中的几天或一天中的时间。
  3. 输入规则的名称,然后单击“完成”。 该规则将添加到“触发器规则”面板中的“我的规则”列表中。

从“触发规则”列表中选择规则时,“规则详细信息”窗格会在“条件”、“属性”和“约束”选项卡中显示其组件。如果你愿意,你可以编辑它们。

6.5 系统选项卡

“系统”选项卡提供有关运行JVM的系统资源、JVM的性能属性以及系统特性列表的信息。

“服务器信息”面板包含一个类别列表,其中包含JVM运行所在服务器的值。这些信息对于调试应用程序的开发和运行时问题以及提交支持请求非常有用。您无法更改此常规系统信息。

JVM统计信息面板包含JVM的关键性能属性的当前值。默认情况下,表中显示以下属性:

  • 当前加载的类的数量
  • 正常运行时间

要向JVM统计表添加属性,请单击JVM统计面板右上角的添加属性按钮。要修改属性,请右键单击属性并执行删除、更新间隔等操作,对于某些属性,请更改值

“系统特性”窗格包含一个表,其中包含JVM的键和系统特性。此面板具有搜索功能,可以通过键或值筛选系统特性。例如,要显示以java.vm开头的特性,请在过滤器文本框中输入java.vm。

6.6 内存选项卡

内存选项卡使您能够监控应用程序使用内存资源的效率。此选项卡主要关注堆使用情况、垃圾收集和活动内存池。此选项卡上提供的信息可帮助您确定是否已配置JVM以提供最佳应用程序性能。

内存选项卡可帮助您快速缩小内存泄漏的范围。当应用程序无意中保留对堆中对象的引用,从而阻止它们被垃圾收集时,就会发生内存泄漏。随着时间的推移,这些无意中持有的对象可能会在堆中增长,最终填满整个Java堆空间,导致频繁的垃圾收集,并最终导致程序因OutOfMemoryError而终止。

您可以使用选项卡右上角的Run a full垃圾收集按钮手动启动一个完整的垃圾收集,然后分析堆转储。

堆直方图

要按类显示堆上内存分配的快照,请单击刷新堆直方图按钮。请注意,会出现一条警告消息,让您知道这可能会导致一些开销。输出显示堆中每个类类型的实例计数、总大小和增量。当第一个堆直方图被捕获时,这将是基线,并且delta将被设置为零。捕获的每个后续直方图将显示与先前直方图的差值。如果按下重置增量计算,则当前捕获的快照将用作基线。如果获得了一系列直方图(例如,每两分钟一次),那么您可能能够观察到一个趋势,从而进行进一步的分析。

当应用程序遇到java.lang.OutOfMemoryError时,分析堆直方图以诊断问题。它将指示当java.lang.OutOfMemoryError发生时,内存中有哪些对象以及它们占用的内存大小。

GC表格

GC Tables面板包含可用垃圾收集器(如G1 Young Generation和G1 Old Generation)的关键性能属性的当前值。收集计数可以帮助您分析各种问题。例如,大量年轻的集合可能是导致响应时间问题的原因。如果旧一代的利用率在垃圾收集(GC)后波动很大而没有上升,那么对象将不必要地从年轻一代复制到旧一代。

活动内存池

内存不足是GC活动增加的主要原因。所以,监控不同内存池(Eden、Survivor和Old)的利用率是很重要的。您可以通过分析活动内存池面板来实现这一点,该面板显示JVM可用内存池的信息。

6.7 线程选项卡

线程选项卡包含有关在应用程序中运行线程的信息。

实时线程图

单击实时线程图以查看Java应用程序启动的线程数。默认情况下,图形包含以下属性:

  • 守护程序实时线程计数:显示实时守护程序线程的数量。

  • 峰值活动线程数:显示峰值活动线程的数量。

  • 活动线程总数:显示活动线程的总数。

向图形添加更多属性

要向实时线程图添加更多属性,请单击“添加属性”按钮。从“选择要添加的属性”对话框中,添加所需的属性。例如,添加DeadlockedThreadCount,然后单击Finish。

  • 活动线程表
    所有可用线程都列在Live threads表中,其中包含线程名称、线程状态和阻塞计数等信息。要筛选表中的线程,请在筛选文本框中输入筛选字符串。例如,输入AWT以查看所有AWT线程。

  • 实时监视线程
    要实时监视线程,请选中“CPU评测”、“死锁检测”和“分配”复选框。默认情况下,所有这些复选框都会被禁用,因为启用它们会消耗大量系统资源。

  • 显示或隐藏表中的列
    若要添加更多列,请在线程名称上单击鼠标右键,然后选择“可见列”。从列表中,选择要显示或隐藏的列。

  • 堆栈跟踪
    如果选择了线程,则其堆栈跟踪将显示在“选定线程的堆栈跟踪”面板中。堆栈跟踪包含所有方法的调用路径,直到当前执行的方法,以帮助您检测导致问题的方法。

6.8 诊断命令

“诊断命令”选项卡列出了可以发送到正在运行的JVM的命令。

这些命令使您能够监控Java应用程序的效率和性能。它们还可以帮助您获得有关性能统计信息、Java飞行记录器(JFR)、内存使用情况、垃圾收集、线程堆栈和目标Java应用程序的JVM运行时的信息。

您可以在操作列表中找到诊断命令,并在右侧配置其参数。要运行它,请从“操作”列表中选择一个命令,输入其参数值,然后单击“执行”按钮。结果显示在输出面板中。

要查看命令的详细说明,请在“操作”列表中选择该命令,然后单击“帮助”按钮。

诊断命令根据执行时造成的性能开销进行分类:

  • 标准命令:这些命令由一个圆圈中带有字母i的图标表示。它们提供一般诊断信息。例如,JFR.dump。

  • 高级命令:这些命令由一个三角形中带有感叹号(!)的图标表示。它们需要更多的资源,可以影响JVM性能,但提供了更多的信息。例如,JFR.start。

  • 内部命令:这些命令由一个倒置三角形中带有感叹号(!)的图标表示。这些命令提供了非常详细的诊断信息,但对JVM性能有很大影响。它们的影响取决于Java堆的大小和内容。例如,GC.heap_dump。

当执行具有中等、高或未知影响的诊断命令时,将显示一条警告消息。可以通过“首选项”控制此设置。如果不希望针对具有特定影响的诊断命令显示警告,请取消选中相应的复选框。

7. JFR

Flight Recorder(JFR)是JDK中内置的一个评测和事件收集框架。

Flight Recorder允许Java管理员和开发人员收集有关JVM和Java应用程序行为的详细底层信息。您可以使用带有插件的JMC来可视化JFR收集的数据。Flight Recorder和JMC一起创建了一个完整的工具链,以持续收集低级别和详细的运行时信息,从而进行事后事件分析。

使用JFR的优点是:

  • 它记录有关JVM事件的数据。您可以在特定的时间实例中记录事件。
  • 使用JFR记录事件使您能够保留执行状态以分析问题。您可以随时访问数据,以便更好地了解问题并解决问题。
  • JFR可以在生产系统上记录大量数据,同时保持较低的记录过程开销。
  • 它最适合记录延迟。它记录应用程序未按预期执行的情况,并提供有关瓶颈的详细信息。
  • 它提供了对程序如何与整个执行环境交互的深入了解,包括硬件、操作系统、JVM、JDK和Java应用程序环境。

JFR可以在应用程序启动时或应用程序运行时启动。数据被记录为带有时间戳的数据点,称为事件。事件分类如下:

  • 持续时间事件:发生在特定的持续时间,具有特定的开始时间和停止时间。
  • 即时事件:立即发生并立即记录,例如,线程被阻塞。
  • 示例事件:定期发生,以检查系统的整体运行状况,例如,每分钟打印一次堆诊断。
  • 自定义事件:使用JMC或API创建的用户定义事件。

此外,在录制模板中还启用了预定义的事件。有些模板只保存非常基本的事件,对性能几乎没有影响。其他模板可能会带来轻微的性能开销,也可能会触发垃圾收集来收集额外的数据。JFR器在<JMC_ROOT>/lib/jfr目录中提供了以下模板:

  • default.jfc:以较低的开销收集预定义的数据集。
  • profile.jfc:提供比default.jfc模板更多的数据,但会带来更多的开销和对性能的影响。

JFR生成以下类型的记录:

  • 时间固定录制:时间固定录制也称为分析录制,它运行一段时间,然后停止。通常,时间固定的录制会启用更多的事件,并且可能会产生更大的性能影响。已打开的事件可以根据您的要求进行修改。定时录制将自动转储并打开。
    固定时间录制的典型用例如下:

    • 配置运行最多的方法以及创建最多对象的位置。
    • 查找使用越来越多堆的类,这表明内存泄漏。
    • 寻找由于同步和更多这样的用例而导致的瓶颈。
  • 连续录制:连续录制是指始终打开并保存(例如)最后六个小时的数据的录制。在此录制过程中,JFR收集事件并将数据写入全局缓冲区。当全局缓冲区填满时,最旧的数据将被丢弃。无论何时请求转储,或者如果转储是由规则触发的,缓冲区中当前的数据都会写入指定的文件。
    使用默认模板的连续录制开销较低,可以收集大量有用的数据。但是,此模板不收集堆统计信息或分配分析。

7.1 启动JFR

按照以下步骤使用JMC开始JFR。

  1. 在JVM浏览器中查找JVM。

  2. 右键单击JVM并选择“开始JFR…” 然后将打开“开始JFR”窗口。

  3. 单击“浏览”查找合适的位置和文件名以保存录制。

  4. 选择时间固定录制(分析录制)或连续录制。对于连续录制,您可以指定要保存的事件的最大大小或最长期限。

  5. 在事件设置下拉列表中选择航班记录模板。模板定义要记录的事件。要创建自己的模板,请单击“模板管理器”。但是,对于大多数用例,请选择Continuous模板(用于非常低的开销录制)或Profileing模板(用于更多的数据和稍微更多的开销)。

  6. 单击“完成”开始录制,或单击“下一步”修改所选模板中定义的事件选项。

  7. 修改航班记录的事件选项。默认设置提供了数据和性能之间的良好平衡。您可以根据自己的要求更改这些设置。
    例如:

    • 阈值是事件记录的长度。默认情况下,会收集10毫秒以上的同步事件。这意味着,如果线程等待锁定的时间超过10ms,则会保存一个事件。您可以降低此值以获得较短内容的更详细数据。
    • 线程转储设置为您提供了一个执行定期线程转储的选项。这些是正常的文本线程转储。
  8. 单击“完成”开始录制,或单击“下一步”修改所选模板中定义的事件详细信息。

  9. 修改所选航班记录模板的事件详细信息。事件详细信息定义事件是否应包含在录制中。对于某些事件,您还可以定义是否应将堆栈跟踪附加到事件,指定持续时间阈值(针对持续时间事件)和请求周期(针对可请求事件)。

  10. 如果要修改前面步骤中设置的任何设置,请单击“上一步”,或者单击“完成”开始录制。 新的JFR显示在进度视图中。

    注意:在JVM浏览器中展开节点以查看正在运行的录制。右键单击任何录制以转储、转储全部、转储最后一部分、编辑、停止或关闭录制。停止分析记录仍将生成一个记录文件,关闭分析记录将丢弃该记录。

注意:您可以使用JMX控制台中的触发器选项卡设置JMC,以便在满足条件时自动启动JFR。有关详细信息,请参见触发器选项卡。

7.2 将当前缓冲区保存到JFR中

JFR将记录的数据保存到扩展名为.JFR的文件中。这些JFR记录是用于在JMC中查看的二进制文件。您可以手动将全局缓冲区的当前内容转储到录制文件中。

  1. 右键单击JVM浏览器中的连续录制,然后选择转储。 将打开转储录制对话框。
  2. 单击“浏览”按钮,然后选择录制的路径和文件名。
  3. 选择以转储整个录制、仅转储录制的最后一部分或指定的录制间隔。
  4. 单击“完成”创建录制转储文件。

7.3 使用JMC分析JFR记录

一旦JFR文件在JMC中打开,您就可以查看许多不同的区域,如代码、内存、线程、锁和I/O,并分析应用程序运行时行为的各个方面。

当定时录制完成或创建正在运行的录制的转储时,会在JMC中自动打开录制文件。您也可以双击或通过“文件”菜单打开任何录制文件。JFR记录将在“自动分析结果”页面中打开。此页面可帮助您更快地诊断问题。例如,如果您正在调整垃圾收集,或跟踪内存分配问题,那么您可以使用内存视图来获得单个垃圾收集事件、分配站点、垃圾收集暂停等的详细视图。您可以通过查看I/O和线程视图来可视化应用程序的延迟配置文件,甚至深入到表示记录中的个别事件的视图中。

查看自动分析结果页面

JFR从记录中提取并分析数据,然后在自动分析结果页面上显示彩色编码的报告日志。

默认情况下,显示黄色和红色分数的结果,以引起您对潜在问题的注意。如果要查看报告中的所有结果,请单击页面右上角的“显示确定结果”按钮(勾号)。同样,要将结果作为表格查看,请单击“表格”按钮。

基准主要分为与以下方面有关的问题:

  • Java应用程序
  • JVM内部
  • 环境

单击报告中的标题,例如Java Application,会显示相应的页面。

注意:您可以在大纲视图中选择相应的条目,以便在自动分析的页面之间导航。

分析Java应用程序
Java应用程序面板显示Java应用程序的总体运行状况。
将注意力集中在有黄色和红色分数的参数上。仪表板提供了问题情况的精确参考。导航到特定页面以分析数据并解决问题。

  • 线程
    Threads页面提供了属于Java应用程序的所有线程的快照。它揭示了有关应用程序线程活动的信息,可以帮助您诊断问题并优化应用程序和JVM性能。
    线程表示在一个表中,每一行都有一个关联的图。图形可以帮助您识别有问题的执行模式。每个线程的状态都显示为堆栈跟踪,它提供了可以立即查看问题区域的上下文信息。例如,您可以很容易地找到死锁的发生位置。

  • 锁定实例
    锁实例提供了有关指定锁信息的线程的进一步详细信息,也就是说,如果线程试图获取锁或等待锁的通知。如果线程获取了任何锁,那么详细信息将显示在堆栈跟踪中。

  • 内存
    检测应用程序性能问题的一种方法是查看它在运行时如何使用内存。
    在Memory页面中,图形表示Java应用程序的堆内存使用情况。每个周期由一个Java堆增长阶段组成,该阶段表示堆内存分配的周期,然后是一个表示垃圾收集的短暂下降,然后循环重新开始。从图中得出的重要推论是,由于垃圾收集器在每个循环中将堆向下推到起始位置,因此内存分配是短暂的。
    选中“垃圾收集”复选框可以在图中查看垃圾收集暂停时间。它表示垃圾收集器在暂停时间内停止了应用程序以完成其工作。长时间的暂停会导致应用程序性能不佳,这一问题需要解决。

  • 方法分析
    方法评测页面使您能够查看特定方法的运行频率以及运行方法所需的时间。瓶颈是通过识别需要花费大量时间执行的方法来确定的。
    由于分析会生成大量数据,因此默认情况下不会启用它。启动一个新的录制,然后在事件设置下拉菜单中选择Profileing-on server。在短时间内进行固定时间的录制。JFR将记录转储到指定的文件名。在JMC中打开“方法评测”页面以查看顶部分配。将显示顶级软件包和类。验证堆栈跟踪中的详细信息。检查代码以验证内存分配是否集中在特定对象上。JFR指向问题持续存在的特定行号。

  • JVM内部
    JVM内部页面提供了有关JVM及其行为的详细信息。
    要观察的最重要的参数之一是垃圾回收。垃圾回收是一个删除未使用对象的过程,以便将空间用于分配新对象。垃圾回收页面可以帮助您更好地了解运行时的系统行为和垃圾回收性能。
    这些图显示了与暂停时间相比的堆使用情况,以及它在指定时间段内的变化情况。该页面还列出了录制过程中发生的所有垃圾收集事件。观察堆中最长的暂停时间。暂停时间表示垃圾收集在应用程序处理过程中花费的时间更长。这意味着垃圾回收释放的堆空间越来越少。这种情况可能会导致内存泄漏。
    有关有效的内存管理,请参阅Compilations页面,该页面提供了有关代码编译和持续时间的详细信息。在大型应用程序中,可能有许多已编译的方法,内存可能会耗尽,从而导致性能问题。

  • 环境
    “环境”页面提供了有关录制环境的信息。它有助于了解CPU使用情况、内存和正在使用的操作系统。
    请参阅进程页面,以了解正在运行的并发进程以及这些进程的竞争CPU使用情况。如果许多进程使用CPU和其他系统资源,应用程序性能将受到影响
    检查事件浏览器页面以查看所有事件类型的统计信息。它可以帮助您关注瓶颈并采取适当的措施来提高应用程序性能。
    您可以使用事件浏览器页面创建自定义页面。从事件类型树中选择所需的事件类型,然后使用页面右上角的选择事件类型按钮单击创建新页面。自定义页面列为事件浏览器页面下方的新事件页面

8.JMC的辅助功能

辅助功能致力于帮助残障人士使用JMC,翻译暂略。

9. JMC故障排除技巧

用不到,暂略

10. JMC的安全合规性

遵循这些安全建议来改进JDK任务控制的管理和管理过程。

  • 使用最新的安全基线JDK版本启动JMC。
  • 仅在安全环境中启用Java发现协议(JDP):JDP是一种使技术,特别是JDK任务控制和JDK飞行记录器,能够在同一网络子网中发现可管理的JVM的协议。它使JVM浏览器能够列出网络上的所有JVM实例。 您可以使用JMC中的自动发现选项来启用JDP协议的首选项。默认情况下,此选项处于禁用状态。要启用该选项,请转到Windows、Preferences、JDK Mission Control、JVM Browser,然后转到JDP。单击自动发现。
  • 将SSL用于JMXRMI连接:远程连接到JMX时,请确保连接到启用了SSL和身份验证选项的JVM。这将确保服务器端和客户端的安全。 提供密钥存储和信任存储凭据。要设置这些值,请转到Windows、Preferences、JDK Mission Control,然后转到JMXRMI。

相关文章:

JDKMissionControl官方用户指南--人工翻译

1. JMC8新增功能 暂时用不到&#xff0c;暂略 2. JDK Mission Control是什么 JMC是一组高级工具&#xff0c;用于管理、监视、分析Java应用程序并排除其故障。JMC能够对代码性能、内存和延迟等领域进行高效而详细的数据分析&#xff0c;而不会引入通常与分析和监控工具相关的…...

MySql-高级(分库分表问题简析) 学习笔记

文章目录 1. 为什么要分库分表&#xff1f;2. 用过哪些分库分表中间件&#xff1f;不同的分库分表中间件都有什么优点和缺点&#xff1f;3. 你们具体是如何对数据库如何进行垂直拆分或水平拆分的&#xff1f;4. 分库分表时&#xff0c;数据迁移方案5. 如何设计可以动态扩容缩容…...

【5.20】五、安全测试——安全测试工具

目录 5.4 常见的安全测试工具 1. Web漏洞扫描工具——AppScan 2. 端口扫描工具——Nmap 3. 抓包工具——Fiddler 4. Web渗透测试工具——Metasploit 小提示&#xff1a;Kali Linux 5.4 常见的安全测试工具 安全测试是一个非常复杂的过程&#xff0c;测试所使用到的工具也…...

【13900k】i9 核显升级驱动

这里写自定义目录标题 官方的助手不能用显卡控制中心提示最新的更新搜索显卡 intel uhd graphics 770 手动下载安装自定义音频为啥也要卸载&#xff1f;新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片…...

使用Python将绿色转换为红色、红色转换为蓝色的图像处理

使用Python将绿色转换为红色、红色转换为蓝色的图像处理 在图像处理中&#xff0c;我们经常需要对图像进行颜色转换和修改。本篇博客介绍了如何使用Python的Pillow库来读取一个文件夹中的所有图像&#xff0c;并将其中的绿色转换为红色&#xff0c;红色转换为蓝色。我们还展示…...

Web2与Web3开发的不同之处

Web2是引入交互功能的第二代互联网&#xff0c;也是我们今天所熟悉的。随着Web的不断发展&#xff0c;第三代互联网&#xff0c;也被称为Web3&#xff0c;正处于积极开发中。Web3引入了在区块链上运行的去中心化和无需许可的系统。但是Web2和Web3开发之间有什么区别呢&#xff…...

递增数组的判断【python实现】

有时候需要对某一组数组的数据进行判断是否 递增 的场景&#xff0c;比如我在开发一些体育动作场景下&#xff0c;某些肢体动作是需要持续朝着垂直方向向上变化&#xff0c;那么z轴的值是会累增的。同理&#xff0c;逆向考虑&#xff0c;递减就是它的对立面。 下面是查找总结到…...

在自定义数据上训练 YOLOv8 实例分割

图像分割是一个核心视觉问题,可以为大量用例提供解决方案。从医学成像到分析流量,它具有巨大的潜力。实例分割,即对象检测+分割,甚至更强大,因为它允许我们在单个管道中检测和分割对象。为此,Ultralytics YOLOv8 模型提供了一个简单的管道。在本文中,我们将对自定义数据…...

洛谷密钥被破解:加密安全面临新挑战

密钥管理是加密系统中非常重要的一环&#xff0c;它涉及到密钥的生成、存储、分发、管理和销毁等多个方面。在密码学中&#xff0c;密钥是保护数据隐私和安全性的核心因素之一&#xff0c;因此&#xff0c;确保密钥的安全和保密性显得尤为重要。在2016年举办的 CQOI 数论竞赛中…...

02 Android开机启动之BootLoader及kernel的启动

Android开机启动之BootLoader及kernel的启动 1、booloader的启动流程 第一阶段:硬件初始化,SVC模式,关闭中断,关闭看门狗,初始化栈,进入C代码 第二阶段:cpu/board/中断初始化;初始化内存以及flash,将kernel从flash中拷贝到内存中,执行bootm,启动内核 2、kernel的启…...

代码随想录算法训练营 Day 49 | 121.买卖股票的最佳时机,122.买卖股票的最佳时机 II

121.买卖股票的最佳时机 讲解链接&#xff1a;代码随想录-121.买卖股票的最佳时机 确定 dp 数组以及下标的含义&#xff1a; dp[i][0] 表示第 i 天持有股票所得最多现金dp[i][1] 表示第 i 天不持有股票所得最多现金 确定递推公式&#xff1a; 如果第 i 天持有股票即 dp[i][0]&…...

精炼计算机网络——数据链路层(一)

文章目录 前言3.1 数据链路和帧3.1.1 数据链路和帧3.1.2 三个基本问题 3.2 点对点协议PPP3.2.1 PPP协议的特点3.2.2 PPP协议3.2.3 PPP协议的工作状态 总结 前言 上篇文章&#xff0c;我们一同学完了物理层的全部内容&#xff0c;在本篇文章中&#xff0c;我们初步学习数据链路…...

猿创征文|Spring系列框架之面向切面编程AOP

⭐️前面的话⭐️ 本篇文章将介绍一种特别重要的思想&#xff0c;AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff0c;即面向切面编程&#xff0c;可以说是OOP&#xff08;Object Oriented Programming&#xff0c;面向对象编程&#xff09;的补充和完善。 …...

IoT架构设计

当前有一个支持5000万用户并发访问的网站&#xff0c;每个用户都有一个IOT设备&#xff0c;用户可以查看设备状态&#xff0c;接受设备通知 1.架构设计 针对不同的业务量模型&#xff0c;可以采用不同的架构设计&#xff0c;如下&#xff1a; 低业务量模型 针对低业务量模型…...

EasyRecovery16电脑硬盘数据恢复软件功能讲解

硬盘是很常见的存储数据的设备&#xff0c;硬盘中很多重要的数据一旦丢失会很麻烦&#xff0c;不过现在有硬盘数据恢复软件可以自行在家恢复数据。今天的文章就带大家来看看硬盘恢复数据的软件EasyRecovery。 EasyRecovery 是一款专业的数据恢复软件&#xff0c;支持恢复不同存…...

信道通信基础 - 传输介质(双绞线、光纤)

文章目录 1 概述2 传输介质2.1 双绞线2.2 光纤 3 扩展3.1 网工软考真题 1 概述 2 传输介质 2.1 双绞线 双绞线&#xff1a;8 根铜导线每 2 根扭在一起&#xff08;百兆用 4 根&#xff0c;千兆必须用 8 根&#xff09;分类 2.2 光纤 光纤&#xff1a;利用光在 玻璃或塑料纤…...

黑马Redis原理篇

黑马Redis原理篇 1、数据结构1.1、动态字符串SDS1.2、IntSet1.3、Dict1.4、ZipList1.5、QuickList1.6、SkipList1.7、RedisObject1.8、五种数据结构1. String&#xff08;小EMBSTR,大RAW (SDS),少量整数INT&#xff09;2. List&#xff08;Redis3.2之后使用QuickList实现&#…...

Sql Server增加字段、修改字段、修改类型、修改默认值

1、修改字段名&#xff1a; alter table 表名 rename column A to B 2、修改字段类型&#xff1a; alter table 表名 alter column 字段名 type not null 3、修改字段默认值   alter table 表名 add default (0) for 字段名 with values 如果字段有默认值&#xff0c;则需要…...

计算机网络第一章(谢希仁第8版学习)

作者&#xff1a;爱塔居 专栏&#xff1a;计算机网络 作者简介&#xff1a;大三学生&#xff0c;希望和大家一起加油 文章目录 目录 文章目录 一、网络、互连网、互联网&#xff08;因特网&#xff09;的概念 二、因特网的组成 三、交换方式 3.1 电路交换 3.2 分组交换 3.3 电路…...

Java反射机制

文章目录 Java反射机制一、反射的用处二、获取字节码文件对象的三种方式1.Class.forName形式2.class属性获取形式3.Student对象获取形式 三、获取构造方法四、获取成员变量五、获取成员方法六、反射的好处&#xff08;面试题&#xff09;七、反射的实例1.泛型擦除2.修改字符串的…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...