Java Flight Recorder OpenJDK 8 和 OpenJDK 11 的 VM 选项综合列表

Java Flight Recorder comprehensive list of VM options for OpenJDK 8 & OpenJDK 11

有没有办法获得 Java 飞行记录器 (JFR) 的完整 VM 选项列表。 我对 OpenJdk 8 & OpenJdk 11 特别感兴趣

到目前为止我发现这个列表非常有用 https://chriswhocodes.com/hotspot_options_jdk8.html

还有

java -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version

是否有任何资源可以提供 JFR 可用的选项列表?

我认为JFR的VM选项最全面和up-to-date的描述可以在jcmd的文档中找到JFR.start和JFR.configure

https://docs.oracle.com/en/java/javase/15/docs/specs/man/jcmd.html

-XX:StartFlightRecording:

  • 延迟(可选) 开始记录前等待的时间长度(整数后跟 's' 秒 'm' 分钟或 'h' 小时)

  • disk:(可选)在记录时也将数据写入磁盘的标志(BOOLEAN,true)

  • dumponexit:(可选)当 Java 虚拟机 (JVM) 关闭时将记录写入磁盘的标志。如果设置为 'true' 并且没有为文件名提供值,则记录将写入进程启动目录中的文件。文件名是一个 system-generated 名称,其中包含进程 ID、记录 ID 和当前时间戳。 (例如:hotspot-pid-33507-id-1-2019_12_12_10_41.jfr) (BOOLEAN, false)

  • duration:(可选)记录的时间长度。请注意,0 表示永远(INTEGER 后跟 's' 表示秒 'm' 表示分钟或 'h' 表示小时)

  • filename:(可选)记录停止时写入飞行记录数据的文件名。如果没有给出文件名,则根据 PID 和当前日期生成一个文件名,并将其放置在进程启动的目录中。文件名也可以是目录,在这种情况下,文件名是根据指定目录中的 PID 和当前日期生成的。 (STRING,无默认值)

  • maxage:(可选)将记录的数据保存在磁盘上的最长时间。该参数仅在disk参数设置为true时有效。注意 0s 意味着永远。 (INTEGER 后跟 's' 代表秒 'm' 代表分钟或 'h' 代表小时,0s)

  • maxsize:(可选)如果未使用以下后缀之一,则要保留在磁盘上的数据的最大大小(以字节为单位):'m' 或 'M' 表示兆字节,或 'g' 或 'G' 表示千兆字节。该参数仅在disk参数设置为'true'时有效。该值不得小于使用 JFR.configure 命令设置的 maxchunksize 参数的值。 (字符串,0(无最大大小))

  • name:(可选)录音名称。如果未提供名称,则会生成一个名称。记下命令响应中显示的生成名称,以便您可以将其与其他命令一起使用。 (字符串,system-generated 默认名称)

  • path-to-gc-root:(可选)用于在记录结束时保存垃圾收集 (GC) 根路径的标志。路径信息对于查找内存泄漏很有用,但收集它很耗时。仅当您怀疑某个应用程序存在内存泄漏时才打开此标志。如果设置参数设置为 'profile',则收集的信息包括分配潜在泄漏对象的堆栈跟踪。 (布尔值,假)

  • settings:(可选)标识要记录哪些事件的设置文件的名称。要指定多个文件,请用逗号 (',') 分隔名称。如果文件不在 JAVA-HOME/lib/jfr 中,请包括路径。 JAVA-HOME/lib/jfr 目录中的 JDK 包含以下配置文件: 'default.jfc':以低开销收集一组预定义的信息,因此对性能的影响最小,可用于记录运行 不断; 'profile.jfc':提供比 'default.jfc' 配置文件更多的数据,但开销和性能影响更大。当需要更多信息时,可在短时间内使用此配置。使用 'none' 在没有预定义配置文件的情况下开始录制。 (字符串,JAVA-HOME/lib/jfr/default.jfc)

-XX:FlightRecorderOptions:

除了 repositorypathmemorysize 或许还有 stackdepth,我不会改变任何以下选项。它们是遗留的,或者供 JVM 支持工程师提供解决方法。使用 non-default 值会增加崩溃或性能相关问题的风险。

  • globalbuffercount:(可选)全局缓冲区的数量。此选项是一个遗留选项:更改 memorysize 参数以更改全局缓冲区的数量。一旦 JFR 被初始化,这个值就不能改变。 (STRING,默认由 memorysize 的值决定)

  • globalbuffersize:(可选)全局缓冲区的大小,以字节为单位。此选项是一个遗留选项:更改 memorysize 参数以改变全局缓冲区的大小。一旦 JFR 被初始化,这个值就不能改变。 (STRING,默认由 memorysize 的值决定)

  • maxchunksize: (Optinal) 如果未使用以下后缀之一,则单个数据块的最大大小(以字节为单位):'m' 或 'M' 为兆字节或 'g' 或 'G' 为千兆字节。一旦 JFR 被初始化,这个值就不能改变。 (字符串,12M)

  • memorysize:(可选)总内存大小,如果未使用以下后缀之一,则以字节为单位:'m' 或 'M' 表示兆字节或 'g' 或 'G' 表示千兆字节。一旦 JFR 被初始化,这个值就不能改变。 (字符串,10M)

  • repositorypath:(可选)记录存储位置的路径,直到它们被写入永久文件。 (STRING,默认位置是操作系统的临时目录。在 Linux 操作系统上,临时目录是 /tmp。在 Windwows 上,临时目录由 TMP 环境变量指定。)

  • stackdepth:(可选)堆栈跟踪的堆栈深度。将此值设置为大于默认值 64 可能会导致性能下降。一旦 JFR 被初始化,这个值就不能改变。 (长,64)

  • thread_buffer_size:(可选)如果未使用以下后缀之一,则每个线程的本地缓冲区大小(以字节为单位):'k' 或 'K' 表示千字节,或 'm' 或 'M' 表示兆字节。覆盖此参数可能会降低性能,因此不推荐使用。一旦 JFR 被初始化,这个值就不能改变。 (字符串,8k)

  • samplethreads:(可选)用于激活线程采样的标志。 (布尔值,真)