第 4 章 JDK Flight Recorder 的配置选项


您可以使用命令行或诊断命令配置 JDK Flight Recorder (JFR)来捕获各种事件集合。

4.1. 使用命令行配置 JDK Flight Recorder

您可以使用以下选项从命令行配置 JDK Flight Recorder (JFR):

4.1.1. 启动 JFR

使用 -XX:StartFlightRecording 选项为 Java 应用启动 JFR 记录。例如:

java -XX:StartFlightRecording=delay=5s,disk=false,dumponexit=true,duration=60s,filename=myrecording.jfr <<YOUR_JAVA_APPLICATION>>

您可以在启动 JFR 记录时 设置以下参数=value 条目:

delay=time
使用此参数指定 Java 应用程序启动时间和记录开始之间的延迟。附加 s 以指定时间(以秒为单位)、m 表示分钟、h 表示小时或 d 表示天。例如,指定 10m 表示 10 分钟。默认情况下,没有延迟,此参数被设为 0。
disk={true|false}
使用此参数指定在记录时是否将数据写入磁盘。默认情况下,此参数为 true
dumponexit={true|false}
使用此参数指定在 JVM 关闭时是否转储正在运行的记录。如果启用了该参数且未设置文件名,则记录将写入到启动记录进度的目录中的文件。文件名是系统生成的名称,其中包含进程 ID、记录 ID 和当前时间戳。例如,hotspot-pid-47496-id-1-2018_01_25_19_10_41.jfr。默认情况下,此参数为 false
duration=time
使用此参数指定记录的持续时间。附加 s 以指定时间(以秒为单位)、m 表示分钟、h 表示小时或 d 表示天。例如,如果您将持续时间指定为 5h,这表示 5 小时。默认情况下,此参数被设置为 0,这意味着记录持续时间中没有设置限制。
filename=path

使用此参数指定记录文件的路径和名称。记录会在停止时写入此文件。例如:

records.jfr

· /home/user/recordings/recording.jfr

name=identifier
使用此参数指定记录的名称和标识符。
maxAge=time
使用此参数指定在磁盘上应提供记录的最大天数。只有 disk 参数设置为 true 时,此参数才有效。附加 s 以指定时间(以秒为单位)、m 表示分钟、h 表示小时或 d 表示天。例如,当您指定 30s 时,它表示 30 秒。默认情况下,此参数被设置为 0,这意味着没有设置限制。
maxsize=size
使用此参数指定要为记录保留的最大磁盘数据大小。只有 disk 参数设置为 true 时,此参数才有效。该值不能小于使用 -XX:FlightRecorderOptions 设置的 maxchunksize 参数的值。附加 m 或 M 以指定大小(以 MB 为单位),或者 g 或 G 以指定大小(以 GB 为单位)。默认情况下,磁盘数据的最大大小没有限制,此参数被设置为 0。
path-to-gc-roots={true|false}

使用此参数指定在记录末尾是否收集垃圾回收(GC) root 的路径。默认情况下,此参数被设置为 false。

GC root 的路径对于查找内存泄漏非常有用。对于红帽构建的 OpenJDK 17,您可以启用 OldObjectSample 事件,该事件比使用堆转储更高效。您还可以在生产环境中使用 OldObjectSample 事件。收集内存泄漏信息会非常耗时,并会产生额外的开销。只有在您开始记录您怀疑有内存泄漏的应用程序时,才应启用此参数。如果 JFR 配置集参数设置为 profile,您可以跟踪对象泄漏的堆栈。它包含在收集的信息中。

settings=path
使用此参数指定事件设置文件的路径和名称(类型为 JFC)。默认情况下,使用 default.jfc 文件,该文件位于 JAVA_HOME/lib/jfr 中。此默认设置文件收集一组预定义的开销信息,因此对性能的影响最少,并可与持续运行的记录一起使用。第二个设置文件也会提供 profile.jfc,它提供比默认配置更多的数据,但可能会有更多的开销和影响性能。当需要更多信息时,请使用此配置短时间。
注意

您可以通过逗号分隔多个参数的值来为多个参数指定值。例如,-XX:StartFlightRecording=disk=false,name=example-recording

4.1.2. JFR 的控制行为

使用 -XX:FlightRecorderOptions 选项设置控制 JFR 行为的参数。例如:

java -XX:FlightRecorderOptions=duration=60s,filename=myrecording.jfr -XX:FlightRecorderOptions=stackdepth=128,maxchunksize=2M <<YOUR_JAVA_APPLICATION>>

您可以 设置以下参数=value 条目来控制 JFR 的行为:

globalbuffersize=size
使用此参数指定用于数据保留的主要内存量。默认值基于为 memorysize 指定的值。您可以更改 memorysize 参数,以更改全局缓冲区的大小。
maxchunksize=size
使用此参数指定记录中数据块的最大大小。附加 m 或 M 以指定以 MB (MB)或 g 或 G 为单位的大小,以指定以 GB 为单位的大小。默认情况下,数据块的最大大小设置为 12 MB。允许的最小大小为 1 MB。
memorysize=size
使用此参数来确定应使用多少缓冲区内存。参数根据指定的大小设置 globalbuffersizenumglobalbuffers 参数。附加 m 或 M 以指定以 MB (MB)或 g 或 G 为单位的大小,以指定以 GB 为单位的大小。默认情况下,内存大小设置为 10 MB。
numglobalbuffers=number
使用此参数指定使用的全局缓冲区数量。默认值基于 memorysize 参数中指定的大小。您可以更改 memorysize 参数,以更改全局缓冲区的数量。
old-object-queue-size=number-of-objects
使用此参数跟踪旧对象的最大数量。默认情况下,对象数量设置为 256。
repository=path
使用此参数指定临时磁盘存储的存储库。默认情况下,它使用系统临时目录。
retransform={true|false}
使用此参数指定是否应使用 JVMTI 重新传输事件类。如果设置为 false,则会将检测添加到加载的事件类中。默认情况下,此参数被设置为 true,以启用类重新传输。
samplethreads={true|false}
使用此参数指定是否启用了线程抽样。只有在启用抽样事件且此参数设为 true 时,线程抽样才会发生。默认情况下,此参数设为 true
stackdepth=depth
使用此参数为堆栈跟踪设置堆栈深度。默认情况下,堆栈深度设置为 64 方法调用。您可以将最大堆栈深度设置为 2048。大于 64 的值可以创建大量开销并降低性能。
threadbuffersize=size
使用此参数指定线程的本地缓冲区大小。默认情况下,本地缓冲区大小设置为 8 KB,最小值为 4 KB。覆盖此参数可能会降低性能,我们不推荐这样做。
注意

您可以通过逗号分隔多个参数的值来为多个参数指定值。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.