Start JDKFlightRecorder--人工翻译

news/2024/11/24 22:11:50/

可以同时运行多个JFR记录,并且每个JFR记录都可以使用不同的配置,你可以使用不同的JFR记录去捕获不同的事件集。但是,为了使JFR内部逻辑更加精简,生成的记录始终包含当时活动的所有记录的所有事件的并集。这意味着,运行多个JFR记录,得到的记录信息会多余实际所需的信息。

通过集成到JMC里的Flight Recorder插件来使用JFR是最简单直观的。该插件允许通过直观的GUI使用JFR的功能。有关通过JMC来使用JFR的一些详细说明,请查看JMC官方文档的Flight Recorder插件部分

本文介绍允许和管理JFR记录更高级的用法:

  • 使用命令行
  • 使用诊断命令
  • 配置JFR记录
  • 自动创建JFR记录
  • 安全
  • 故障排除

使用命令行 Command Line

在程序启动时,你可以在命令行通过java的-XX:StartFlightRecording选项,来开始并配置一个JFR记录,然后声明-XX:+FlightRecorder选项来启用JFR,因为JFR是一个商业特性,因此还需要声明-XX:+UnlockCommercialFeatures选项

下面这个例子就说明了如何运行MyApp并且同时开启一个60秒的JFR记录,该记录将保存到一个名为myrecording.jfr的文件

java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=duration=60s,filename=myrecording.jfr MyApp

使用诊断命令Diagnostic Command

执行诊断命令最简单的方法是使用jcmd工具(位于java安装目录中)。要发出命令,必须将JVM进程号(或主类的名称)和实际的命令作为参数传递给jcmd。

例如在pid为5368的正在运行的java进程上开启一个60秒的JFR记录,并将其保存到当前目录下命名为myrecording.jfr的文件中

jcmd 5368 JFR.start duration=60s filename=myrecording.jfr

查看所有正在运行的Java进程列表,使用jcmd命令并且不加任何参数。查看对于一个正在运行的Java程序可以使用的所有命令,将help作为pid(或者主类名称)之后的诊断命令。

与JFR相关的命令包括:

  • JFR.start 开始记录
  • JFR.check 检查指定进程的所有运行中的JFR记录的运行情况,包括JFR记录id,文件名,持续时间等
  • JFR.stop 停止指定id的JFR记录(默认情况下停止id为1的记录)
  • JFR.dump 转存指定id的JFR记录,时间为到目前为止收集的数据(默认情况下转储id为1的记录的数据)

配置JFR记录

您可以通过许多其他方式配置JFR记录。无论您如何启动JFR记录(使用命令行或者诊断命令),他们的工作方式都是相同的。

设置大小和寿命

maxsize=size
附加单位为k或K,m或M,g或G,或者不指定单位,默认为1byte字节
maxage=age
附加单位为s秒,或m分,或h小时,或d天数

如果同时设定了大小和寿命限制,则在先达到其中一个限制时将删除数据

设置延迟

在安排JFR记录时,你可能想要在实际开始前添加一个延迟。例如,当从命令行运行时,您可能希望应用程序在开始录制之前启动或达到稳定状态。要实现这一点,请使用delay参数:

delay=delay
附加单位为s秒,或m分,或h小时,或d天数

设置压缩

尽管录制文件格式非常紧凑,但您仍然可以通过将其添加到ZIP存档中进一步压缩。要启用压缩,请使用以下参数:

compress=true

请注意,压缩需要CPU资源,这会对性能产生负面影响。

自动创建JFR记录

当使用默认记录运行时,您可以配置JFR,以便在出现某些指定情况时自动将当前内存中的记录数据保存到文件中。如果还使用了磁盘存储库,则还将包括磁盘存储库中的当前信息。

退出时创建录音

要在每次JVM退出时将记录数据保存到指定路径,请使用以下选项启动应用程序:

-XX:FlightRecorderOptions=defaultrecording=true,dumponexit=true,dumponexitpath=path

设置应该保存记录的路径。如果指定目录,则在该目录中创建一个以日期和时间作为名称的文件。如果指定文件名,则使用该名称。如果不指定路径,JFR记录文件将保存在当前目录中。

使用触发器创建录音
您可以使用JMC的控制台来设置触发器。触发器是一种规则,只要规则指定的条件为真,它就会执行操作。

例如,您可以创建一个规则,在堆大小超过100 MB时触发JFR记录。JMC中的触发器可以使用通过JMX MBean公开的任何属性作为规则的输入。
在JMX控制台的触发器选项卡定义触发器,有关如何创建触发器的详细信息,请参阅JMC官方文档

安全

JFR仅用于诊断的目的,JFR记录文件可能包含机密信息,如Java命令行选项和环境变量。在存储或传输JFR记录文件时要像诊断核心文件或堆数据转存一样小心。

使用JFR的各种方法的安全权限

Method方法Security安全
Command line命令行每一个可以访问Java程序命令行的人都必须是可信任的
Diagnostic commands诊断命令只有Java进程的所有者可以使用jcmd来控制该进程。
JMC客户端JMC客户端使用JMX访问JVM。

故障排除

通过使用以下选项之一启动JVM,可以从Java Flight Recorder收集大量诊断信息:

  • -XX:FlightRecorderOptions=loglevel=debug
  • -XX:FlightRecorderOptions=loglevel=trace

附:JFR命令参考

Command-Line Options 命令行选项
当您使用java命令行启动你的Java应用程序,您可以指定选项以启用JFR、配置其设置以及开始JFR记录。以下命令行选项特定于Java Flight Recorder:

  • -XX:+|-FlightRecorder
  • -XX:FlightRecorderOptions
  • -XX:StartFlightRecording

这些命令行选项仅在JDK的商业许可证中可用。要使用它们,还必须指定-XX:+UnlockCommercialFeatures选项。

注:使用 -XX 选项的前提是您对系统有透彻的了解,如果这些命令使用不当,可能会影响系统的稳定性或性能。
-XX 选项是试验性的,随时可能更改。

Diagnostic Command Reference 诊断命令参考
这是对可用于控制JFR的诊断命令和每个命令可用参数的描述。也可通过运行 jcmd 命令和指定的进程标识符,后跟 help参数和命令名获取帮助信息。例如,若要获取 JFR.start命令的帮助信息,请运行以下命令:

jcmd 5361 help JFR.start

要获取JVM可用的诊断命令的完整列表,不指定命令名即可,即jcmd 5461 help
与JFR相关的诊断命令包括:

  • JFR.start
  • JFR.check
  • JFR.stop
  • JFR.dump

JFR.start 开启

参数说明类型默认
nameJFR记录名称String
settings服务器端模板String
defaultrecording开始默认录制BooleanFalse
delay延迟开始记录Time0s
duration记录持续时间Time0s(表示“永远”)
filename生成的记录文件名String
compressGZip压缩生成的记录文件BooleanFalse
maxage缓冲区数据的最长期限Time时间0s(表示“无年龄限制”)
maxsize缓冲区的最大大小(字节)Long长0(表示“无最大大小”)

JFR.check 检查

参数说明类型默认
name记录名称String
recording记录IDLong1
verbose打印详细数据BooleanFalse

JFR.stop 停止

参数说明类型默认
name记录名称String
recording记录IDLong1
discard丢弃记录数据Boolean
copy_to_file将记录数据复制到文件String
compress_copyGZip压缩“复制到文件”的目标BooleanFalse

JFR.dump 转存

参数说明类型默认
name记录名称String
recording记录IDLong1
copy_to_file将记录数据复制到文件String
compress_copyGZip压缩“复制到文件”目标BooleanFalse

http://www.ppmy.cn/news/75175.html

相关文章

Java中 动态代理的应用场景

Java中 动态代理的应用场景 动态代理的应用场景 动态代理的应用场景 \使用JDK动态代理的技术使用CGLIB动态代理的技术1Spring Cloud FeignHibernate 延迟加载2Spring Cloud OpenFeignMyBatis 缓存3Spring Cloud SecuritySpring 事务控制4Spring Cloud ContractSpring Cloud Zu…

UI自动化测试用例管理平台搭建

用到的工具:python3 django2 mysql RabbitMQ celery selenium python3和selenium这个网上很多教程,我不在这一一说明; 平台功能介绍: 项目管理:用于管理项目。每个项目可以设置多个环境,例如开发环境…

物联网网络通讯知识

RTU是什么 RTU英文全称Remote Terminal Units,中文全称为远程终端单元。远程终端设备(RTU)是安装在远程现场的电子设备,用来监视和测量安装在远程现场的传感器和设备。通俗理解就是能够编程的还可以将数据传输到服务器的工具。RTU内部是包含通讯模块的&…

libvirt job机制浅析

libvirt 中,job 机制用于处理和跟踪针对虚拟机域(domain)的长时间操作,如迁移、快照、保存,热插拔等。job 机制的主要目的是确保在同一时间只有一个长时间操作可以执行,从而避免竞争条件和不一致性问题。 …

JS中字符串一些常用的方法

以下是一些常用的 JavaScript 字符串操作方法,按照字母顺序进行分类: 字符串操作方法 charAt(position): 返回指定位置的字符。concat(string1, string2, …, stringN): 将两个或多个字符串连接起来。includes(searchString, position):判断…

【数据结构与算法篇】栈与队列(详解)附加Leetcode经典笔试题

​👻内容专栏:《数据结构与算法专栏》 🐨本文概括: 讲述数据结构栈与队列基本知识。 🐼本文作者:花 碟 🐸发布时间:2023.5.23 文章目录 一、栈1.栈的概念及结构2.栈的实现 二、有效的…

有了 IP 地址,为什么还要用 MAC 地址?

MAC地址等价于快递包裹上的收件人姓名。 MAC地址更多是用于确认对方信息而存在的。就如同快递跨越几个城市来到你面前,快递员需要和你确认一下收件人是否正确,才会把包裹交给你一样。 IP66在线查IP地址位置:https://www.ip66.net/?utm-sour…

linux0.12-10-3-console.c

[494页] 10-3 console.c程序 10-3-1 功能描述 本文件是内核中最长的程序之一,但功能比较单一。其中的所有子程序都是为了实现终端屏幕写函数con_write()以及进行终端屏幕显示的控制操作。 当往一个控制台设备执行写操作时,就会调用con_write()函数。…