Start JDKFlightRecorder--人工翻译

可以同时运行多个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 开启

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

JFR.check 检查

参数 说明 类型 默认
name 记录名称 String
recording 记录ID Long 1
verbose 打印详细数据 Boolean False

JFR.stop 停止

参数 说明 类型 默认
name 记录名称 String
recording 记录ID Long 1
discard 丢弃记录数据 Boolean
copy_to_file 将记录数据复制到文件 String
compress_copy GZip压缩“复制到文件”的目标 Boolean False

JFR.dump 转存

参数 说明 类型 默认
name 记录名称 String
recording 记录ID Long 1
copy_to_file 将记录数据复制到文件 String
compress_copy GZip压缩“复制到文件”目标 Boolean False

你可能感兴趣的:(Java技术栈,java,jvm,linux)