4.2. 使用诊断命令(JCMD)配置 JDK Flight Recorder
您可以使用 Java 诊断命令配置 JDK Flight Recorder(JFR)。执行诊断命令的最简单方法是使用位于 Java 安装目录中的 jcmd 工具。要使用命令,您必须将 JVM 的进程标识符或主类名称传递到 jcmd,并将实际命令参数传递给 jcmd。您可以通过运行不带参数的 jcmd 来获取 JVM 或主类的名称,也可以使用 jps。jps(Java Process Status)工具列出了它具有访问权限的目标系统上的 JVM。
要查看所有正在运行的 Java 进程的列表,请使用不带任何参数的 jcmd 命令。要查看可供正在运行的 Java 应用程序使用的命令的完整列表,请在进程标识符或主类名称后将 help 指定为诊断命令。
对 JFR 使用以下诊断命令:
4.2.1. 开始 JFR
使用 JFR.start 诊断命令启动动态记录。例如:
jcmd <PID> JFR.start delay=10s duration=10m filename=recording.jfr
表 4.1. 下表列出了您可以在此命令中使用的参数:
| 参数 | 描述 | 数据类型 | 默认值 |
|---|---|---|---|
| name | 记录的名称 | 字符串 | - |
| 设置 | 服务器端模板 | 字符串 | - |
| duration | 记录持续时间 | Time | 0s |
| filename | 生成记录文件名 | 字符串 | - |
| maxAge | 缓冲数据的最大期限 | Time | 0s |
| maxsize | 最大缓冲区大小(以字节为单位) | Long | 0 |
| dumponexit | JVM 关闭时转储运行记录 | 布尔值 | - |
| path-to-gc-roots | 收集垃圾回收器根路径 | 布尔值 | False |
4.2.2. 停止 JFR
使用 JFR.stop 诊断命令停止运行动态记录。例如:
jcmd <PID> JFR.stop name=output_file
表 4.2. 下表列出了您可以在此命令中使用的参数。
| 参数 | 描述 | 数据类型 | 默认值 |
|---|---|---|---|
| name | 记录的名称 | 字符串 | - |
| filename | 将记录数据复制到文件中 | 字符串 | - |
4.2.3. Check JFR
使用 JFR.check 命令显示有关正在进行的记录的信息。例如:
jcmd <PID> JFR.check
表 4.3. 下表列出了您可以在此命令中使用的参数。
| 参数 | 描述 | 数据类型 | 默认值 |
|---|---|---|---|
| name | 记录的名称 | 字符串 | - |
| filename | 将记录数据复制到文件中 | 字符串 | - |
| maxAge | 转储文件的最长持续时间 | Time | 0s |
| maxsize | 要转储的最大字节数 | Long | 0 |
| begin | 起始时间转储数据 | 字符串 | - |
| end | 结束时间转储数据 | 字符串 | - |
| path-to-gc-roots | 收集垃圾回收器根路径 | 布尔值 | false |
4.2.4. 转储 JFR
使用 JFR.dump 诊断命令将动态记录的内容复制到文件中。例如:
jcmd <PID> JFR.dump name=output_file filename=output.jfr
表 4.4. 下表列出了您可以在此命令中使用的参数。
| 参数 | 描述 | 数据类型 | 默认值 |
|---|---|---|---|
| name | 记录的名称 | 字符串 | - |
| filename | 将记录数据复制到文件中 | 字符串 | - |
| maxAge | 转储文件的最长持续时间 | Time | 0s |
| maxsize | 要转储的最大字节数 | Long | 0 |
| begin | 起始时间转储数据 | 字符串 | - |
| end | 结束时间转储数据 | 字符串 | - |
| path-to-gc-roots | 收集垃圾回收器根路径 | 布尔值 | false |
4.2.5. 配置 JFR
使用 JFR.configure 诊断命令配置动态记录。例如:
jcmd <PID> JFR.configure repositorypath=/home/jfr/recordings
表 4.5. 下表列出了您可以在此命令中使用的参数。
| 参数 | 描述 | 数据类型 | 默认值 |
|---|---|---|---|
| repositorypath | 仓库的路径 | 字符串 | - |
| dumppath | 转储的路径 | 字符串 | - |
| 堆栈深度 | 堆栈深度 | Jlong | 64 |
| globalbuffercount | 全局缓冲区的数量 | Jlong | 32 |
| globalbuffersize | 全局缓冲的大小 | Jlong | 524288 |
| thread_buffer_size | 线程缓冲的大小 | Jlong | 8192 |
| memorysize | 总体内存大小 | Jlong | 16777216 |
| maxchunksize | 独立磁盘块的大小 | Jlong | 12582912 |
| Samplethreads | 激活线程抽样 | 布尔值 | true |
更新于 2023-05-11