6

有没有办法获得 Java Flight Recorder (JFR) 的 VM 选项的完整列表。我对 OpenJdk 8 和 OpenJdk 11 特别感兴趣

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

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

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

4

1 回答 1

10

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

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

-XX:开始飞行记录:

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

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

  • dumponexit:(可选)用于在 Java 虚拟机 (JVM) 关闭时将记录写入磁盘的标志。如果设置为“true”并且没有为文件名指定值,则记录将写入启动进程的目录中的文件中。文件名是系统生成的名称,包含进程 ID、记录 ID 和当前时间戳。(例如:hotspot-pid-33507-id-1-2019_12_12_10_41.jfr) (BOOLEAN, false)

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

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

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

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

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

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

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

-XX:飞行记录器选项:

除了repositorypathmemorysizestackdepth 之外,我不会更改以下任何选项。它们是遗留的,或者可供 JVM 支持工程师提供解决方法。使用非默认值会增加崩溃或性能相关问题的风险。

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

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

  • maxchunksize:(可选)如果未使用以下后缀之一,则单个数据块的最大大小(以字节为单位):“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:(可选)用于激活线程采样的标志。(布尔值,真)

于 2020-09-30T20:25:52.730 回答