Jcmd - 向 JVM 发送诊断命令
介绍 Jcmd
jcmd - 向正在运行的 Java 虚拟机 (JVM) 发送诊断命令请求
概要
jcmd [pid | main-class] command... | PerfCounter.print | -f filename
jcmd [-l]
jcmd -h
pid
使用时,jcmd
实用程序会将诊断命令请求发送到 Java 进程的进程 ID。
main-class
使用时,jcmd
实用程序会将诊断命令请求发送到所有具有指定主类名称的 Java 进程。
command
command
必须是为所选 JVM 提供的有效 jcmd
命令。jcmd
的可用命令列表可以通过运行 help
命令(jcmd
pid help
)获得,其中 pid 是正在运行的 Java 进程的进程 ID。如果 pid 为 0
,则命令将发送到所有 Java 进程。主类参数将用于部分或完全匹配用于启动 Java 的类。如果没有给出选项,它将列出正在运行的 Java 进程标识符,以及用于启动进程的主类和命令行参数(与使用 -l
相同)。
Perfcounter.print
打印指定 Java 进程公开的性能计数器。
-f
filename
从指定文件 filename 读取并执行命令。
-l
显示不在单独的 docker 进程中运行的 Java 虚拟机进程标识符列表,以及用于启动进程的主类和命令行参数。如果 JVM 位于 docker 进程中,则必须使用 ps
等工具查找 PID。
注意
不带参数使用 jcmd
等同于使用 jcmd -l
。
-h
显示 jcmd
实用程序的命令行帮助。
描述
jcmd
实用程序用于向 JVM 发送诊断命令请求。它必须在运行 JVM 的同一台机器上使用,并且具有与启动 JVM 时使用的相同有效用户和组标识符。每个诊断命令都有自己的一组参数。要显示诊断命令的描述、语法和可用参数列表,请使用命令名称作为参数。例如
jcmd pid help command
如果参数包含空格,则必须用单引号或双引号('
或 "
)将它们括起来。此外,必须用反斜杠(\
)转义单引号或双引号,以防止操作系统 shell 处理引号。或者,您可以用单引号将这些参数括起来,然后用双引号括起来(或用双引号括起来,然后用单引号括起来)。
如果将进程标识符 (pid) 或主类 (main-class) 指定为第一个参数,则 jcmd
实用程序会将诊断命令请求发送到具有指定标识符的 Java 进程,或发送到所有具有指定主类名称的 Java 进程。您还可以通过将 0
指定为进程标识符,将诊断命令请求发送到所有可用的 Java 进程。
Jcmd 的命令
command 必须是为所选 JVM 提供的有效 jcmd
诊断命令。jcmd
的可用命令列表可以通过运行 help
命令(jcmd
pid help
)获得,其中 pid 是正在运行的 Java 进程的进程 ID。如果 pid 为 0
,则命令将发送到所有 Java 进程。主类参数将用于部分或完全匹配用于启动 Java 的类。如果没有给出选项,它将列出正在运行的 Java 进程标识符,以及用于启动进程的主类和命令行参数(与使用 -l
相同)。
以下命令可用
help [options] [arguments]
有关特定命令的更多信息。
arguments:
- command name: 我们想要帮助的命令名称(STRING,无默认值)
注意
以下 options 必须使用 key 或 key=
value 语法指定。
options:
-
-all
: (可选)显示所有命令的帮助(BOOLEAN,false)。
Compiler.codecache
打印代码缓存布局和边界。
影响:低
权限:java.lang.management.ManagementPermission(monitor)
Compiler.codelist
打印代码缓存中所有已编译的方法。
影响:中等
权限:java.lang.management.ManagementPermission(monitor)
Compiler.queue
打印排队等待编译的方法。
影响:低
权限:java.lang.management.ManagementPermission(monitor)
Compiler.directives_add *filename* *arguments*
从文件添加编译器指令。
影响:低
权限:java.lang.management.ManagementPermission(monitor)
arguments:
filename: 指令文件的名称(STRING,无默认值)
Compiler.directives_clear
删除所有编译器指令。
影响:低
权限:java.lang.management.ManagementPermission(monitor)
Compiler.directives_print
打印所有活动的编译器指令。
影响:低
权限:java.lang.management.ManagementPermission(monitor)
Compiler.directives_remove
删除最新添加的编译器指令。
影响:低
权限:java.lang.management.ManagementPermission(monitor)
GC.class_histogram
options
提供有关 Java 堆使用情况的统计信息。
影响:高 - 取决于 Java 堆的大小和内容。
权限:java.lang.management.ManagementPermission(monitor)
注意
options 必须使用 key 或 key=
value 语法指定。
options:
-
-all
: (可选)检查所有对象,包括不可达对象(BOOLEAN,false)
GC.finalizer_info
提供有关 Java 终结队列的信息。
影响:中等
权限:java.lang.management.ManagementPermission(monitor)
GC.heap_dump
options arguments
生成 Java 堆的 HPROF 格式转储。
影响:高 - 取决于 Java 堆的大小和内容。除非指定了 -all
选项,否则请求完全 GC。
权限:java.lang.management.ManagementPermission(monitor)
注意
以下 options 必须使用 key 或 key=
value 语法指定。
options:
-
-all
: (可选)转储所有对象,包括不可达对象(BOOLEAN,false)
arguments:
- filename: 转储文件的名称(STRING,无默认值)
GC.heap_info
提供通用的 Java 堆信息。
影响:中等
权限:java.lang.management.ManagementPermission(monitor)
GC.run
调用 java.lang.System.gc()
。
影响:中等 - 取决于 Java 堆的大小和内容。
GC.run_finalization
调用 java.lang.System.runFinalization()
。
影响:中等 - 取决于 Java 内容。
JFR.check
options
显示有关正在运行的飞行记录的信息
影响:低
注意
options 必须使用 key 或 key=
value 语法指定。如果没有输入参数,则会显示所有活动记录的信息。
options:
name
: (可选)飞行记录的名称。(STRING,无默认值)verbose
: (可选)用于打印记录的事件设置的标志(BOOLEAN,false)
JFR.configure
options
设置飞行记录的参数
影响:低
注意
options 必须使用 key 或 key=
value 语法指定。如果没有输入参数,则会显示当前设置。
options:
globalbuffercount
: (可选)全局缓冲区的数量。此选项是遗留选项:更改memorysize
参数以更改全局缓冲区的数量。此值在 JFR 初始化后无法更改。(STRING,默认值由memorysize
的值决定)globalbuffersize
: (可选)全局缓冲区的大小(以字节为单位)。此选项是遗留选项:更改memorysize
参数以更改全局缓冲区的大小。此值在 JFR 初始化后无法更改。(STRING,默认值由memorysize
的值决定)maxchunksize
: (可选)单个数据块的最大大小(以字节为单位),如果未使用以下后缀之一:'m' 或 'M' 表示兆字节,或者 'g' 或 'G' 表示千兆字节。此值在 JFR 初始化后无法更改。(STRING,12M)memorysize
: (可选)总内存大小(以字节为单位),如果未使用以下后缀之一:'m' 或 'M' 表示兆字节,或者 'g' 或 'G' 表示千兆字节。此值在 JFR 初始化后无法更改。(STRING,10M)repositorypath
: (可选)记录存储在永久文件写入之前的路径。(STRING,默认位置是操作系统的临时目录。在 Linux 操作系统上,临时目录是/tmp
。在 Windwows 上,临时目录由TMP
环境变量指定。)stackdepth
: (可选)堆栈跟踪的堆栈深度。将此值设置为大于默认值 64 可能会导致性能下降。此值在 JFR 初始化后无法更改。(LONG,64)thread_buffer_size
: (可选)每个线程的本地缓冲区大小(以字节为单位),如果未使用以下后缀之一:'k' 或 'K' 表示千字节,或者 'm' 或 'M' 表示兆字节。覆盖此参数可能会降低性能,不建议这样做。此值在 JFR 初始化后无法更改。(STRING,8k)samplethreads
: (可选)用于激活线程采样的标志。(BOOLEAN,true)
JFR.dump
options
在飞行记录运行时将数据写入文件
影响:低
注意
options 必须使用 key 或 key=
value 语法指定。不需要任何选项。数据写入后,记录将继续运行。
options:
begin
: (可选)指定将包含在转储文件中的记录数据的开始时间。格式指定为本地时间。(STRING,无默认值)end
: (可选)指定将包含在转储文件中的记录数据的结束时间。格式指定为本地时间。(STRING,无默认值)注意:对于
begin
和end
,时间必须采用可以被 java.time.LocalTime::parse(STRING)、java.time.LocalDateTime::parse(STRING) 或 java.time.Instant::parse(STRING) 读取的格式。例如,“13:20:15”、“2020-03-17T09:00:00” 或“2020-03-17T09:00:00Z”。注意:
begin
和end
时间对应于飞行记录数据中记录信息内的 timestamps。另一种选择是使用相对于当前时间的相对时间,该时间由负整数后跟“s”、“m”或“h”指定。例如,“-12h”、“-15m”或“-30s”。
filename
: (可选)飞行记录数据转储到的文件的名称。如果没有给出文件名,则会从 PID 和当前日期生成文件名。文件名也可以是目录,在这种情况下,文件名将从指定目录中的 PID 和当前日期生成。(STRING,无默认值)maxage
: (可选)将飞行记录数据转储到文件的持续时间。(INTEGER 后跟 's' 表示秒,'m' 表示分钟,或 'h' 表示小时,无默认值)maxsize
: (可选)从飞行记录转储的数据量的最大大小(以字节为单位),如果未使用以下后缀之一:'m' 或 'M' 表示兆字节,或者 'g' 或 'G' 表示千兆字节。(STRING,无默认值)name
: (可选)记录的名称。如果没有给出名称,则会转储所有记录的数据。(STRING,无默认值)path-to-gc-root
: (可选)用于在转储记录数据时保存到垃圾收集 (GC) 根的路径的标志。路径信息对于查找内存泄漏很有用,但收集它可能会导致应用程序暂停一小段时间。仅当您怀疑应用程序存在内存泄漏时才打开此标志。(BOOLEAN,false)
JFR.start
options
启动飞行记录
影响:低
注意
options 必须使用 key 或 key=
value 语法指定。如果没有输入参数,则会使用默认值启动记录。
options:
delay
: (可选) 开始录制前等待的时间长度(整数后跟 's' 表示秒,'m' 表示分钟,'h' 表示小时,0s)disk
: (可选) 录制时是否也将数据写入磁盘的标志(布尔值,true)dumponexit
: (可选) Java 虚拟机 (JVM) 关闭时是否将录制内容写入磁盘的标志。如果设置为 'true' 且未为filename
指定值,则录制内容将写入进程启动目录中的一个文件。文件名是系统生成的,包含进程 ID、录制 ID 和当前时间戳。(例如:id-1-2019_12_12_10_41.jfr
)(布尔值,false)duration
: (可选) 录制时间长度。注意,0s
表示永远(整数后跟 's' 表示秒,'m' 表示分钟,'h' 表示小时,0s)filename
: (可选) 停止录制时写入飞行录制数据的文件名。如果未指定文件名,则从 PID 和当前日期生成文件名,并将其放置在进程启动目录中。文件名也可以是目录,在这种情况下,文件名将从 PID 和当前日期在指定目录中生成。(字符串,无默认值)maxage
: (可选) 在磁盘上保留录制数据的最长时间。此参数仅在disk
参数设置为true
时有效。注意,0s
表示永远。(整数后跟 's' 表示秒,'m' 表示分钟,'h' 表示小时,0s)maxsize
: (可选) 在磁盘上保留数据的最大大小(字节),如果未使用以下后缀之一:'m' 或 'M' 表示兆字节,'g' 或 'G' 表示千兆字节。此参数仅在disk
参数设置为true
时有效。该值必须不小于使用JFR.configure
命令设置的maxchunksize
参数的值。(字符串,0(无最大大小))name
: (可选) 录制的名称。如果未提供名称,则会生成一个名称。请注意响应命令中显示的生成名称,以便您可以在其他命令中使用它。(字符串,系统生成的默认名称)path-to-gc-root
: (可选) 用于在录制结束时保存到垃圾回收 (GC) 根的路径的标志。路径信息有助于查找内存泄漏,但收集它很耗时。仅当您怀疑应用程序存在内存泄漏时才打开此标志。如果settings
参数设置为 'profile',则收集的信息包括分配潜在泄漏对象的堆栈跟踪。(布尔值,false)settings
: (可选) 设置文件的名称,用于标识要记录的事件。要指定多个文件,请用逗号 (',') 分隔名称。如果文件不在JAVA-HOME
/lib/jfr 中,请包含路径。以下配置文件包含在JAVA-HOME
/lib/jfr 目录中的 JDK 中:'default.jfc':以低开销收集一组预定义的信息,因此它对性能的影响最小,可以与持续运行的录制一起使用;'profile.jfc':提供比 'default.jfc' 配置文件更多的数据,但开销更大,对性能的影响也更大。在需要更多信息时,将此配置用于短时间段。使用none
启动没有预定义配置文件的录制。(字符串,JAVA-HOME
/lib/jfr/default.jfc)
JFR.stop
options
停止飞行录制
影响:低
注意
options 必须使用 key 或 key=
value 语法指定。如果未输入任何参数,则不会停止任何录制。
options:
filename
: (可选) 停止录制时写入录制内容的文件名。如果未提供路径,则录制中的数据将被丢弃。(字符串,无默认值)name
: (可选) 录制的名称(字符串,无默认值)
JVMTI.agent_load
arguments
加载 JVMTI 本机代理。
影响:低
权限:java.lang.management.ManagementPermission(control)
arguments:
library path: 要加载的 JVMTI 代理的绝对路径。(字符串,无默认值)
agent option: (可选) 传递给代理的选项字符串。(字符串,无默认值)
JVMTI.data_dump
向 JVM 发出 JVMTI 的数据转储请求。
影响:高
权限:java.lang.management.ManagementPermission(monitor)
ManagementAgent.start
options
启动远程管理代理。
影响:低 - 无影响
注意
以下 options 必须使用 key 或 key=
value 语法指定。
options:
config.file
: (可选) 设置com.sun.management.config.file
(字符串,无默认值)jmxremote.host
: (可选) 设置com.sun.management.jmxremote.host
(字符串,无默认值)jmxremote.port
: (可选) 设置com.sun.management.jmxremote.port
(字符串,无默认值)jmxremote.rmi.port
: (可选) 设置com.sun.management.jmxremote.rmi.port
(字符串,无默认值)jmxremote.ssl
: (可选) 设置com.sun.management.jmxremote.ssl
(字符串,无默认值)jmxremote.registry.ssl
: (可选) 设置com.sun.management.jmxremote.registry.ssl
(字符串,无默认值)jmxremote.authenticate
: (可选) 设置com.sun.management.jmxremote.authenticate
(字符串,无默认值)jmxremote.password.file: (可选) 设置
com.sun.management.jmxremote.password.file
(字符串,无默认值)jmxremote.access.file
: (可选) 设置com.sun.management.jmxremote.acce ss.file
(字符串,无默认值)jmxremote.login.config
: (可选) 设置com.sun.management.jmxremote.log in.config
(字符串,无默认值)jmxremote.ssl.enabled.cipher.suites
: (可选) 设置com.sun.management
。jmxremote.ssl.enabled.cipher.suite
: (字符串,无默认值)jmxremote.ssl.enabled.protocols
: (可选) 设置com.sun.management.jmxr emote.ssl.enabled.protocols
(字符串,无默认值)jmxremote.ssl.need.client.auth
: (可选) 设置com.sun.management.jmxre mote.need.client.auth
(字符串,无默认值)jmxremote.ssl.config.file
: (可选) 设置com.sun.management.jmxremote. ssl_config_file
(字符串,无默认值)jmxremote.autodiscovery
: (可选) 设置com.sun.management.jmxremote.au todiscovery
(字符串,无默认值)jdp.port
: (可选) 设置com.sun.management.jdp.port
(整数,无默认值)jdp.address
: (可选) 设置com.sun.management.jdp.address
(字符串,无默认值)jdp.source_addr
: (可选) 设置com.sun.management.jdp.source_addr
(字符串,无默认值)jdp.ttl
: (可选) 设置com.sun.management.jdp.ttl
(整数,无默认值)jdp.pause
: (可选) 设置com.sun.management.jdp.pause
(整数,无默认值)jdp.name
: (可选) 设置com.sun.management.jdp.name
(字符串,无默认值)
ManagementAgent.start_local
启动本地管理代理。
影响:低 - 无影响
ManagementAgent.status
打印管理代理状态。
影响:低 - 无影响
权限:java.lang.management.ManagementPermission(monitor)
ManagementAgent.stop
停止远程管理代理。
影响:低 - 无影响
Thread.print
options
打印所有带有堆栈跟踪的线程。
影响:中等 - 取决于线程数量。
权限:java.lang.management.ManagementPermission(monitor)
注意
以下 options 必须使用 key 或 key=
value 语法指定。
options:
-
-l
: (可选) 打印java.util.concurrent
锁(布尔值,false)
VM.classloader_stats
打印所有类加载器的统计信息。
影响:低
权限:java.lang.management.ManagementPermission(monitor)
VM.class_hierarchy
options arguments
打印所有已加载类的列表,缩进以显示类层次结构。每个类的名称后跟其类加载器的 ClassLoaderData*,或者如果它是通过引导类加载器加载的,则为 "null"。
影响:中等 - 取决于已加载类的数量。
权限:java.lang.management.ManagementPermission(monitor)
注意
以下 options 必须使用 key 或 key=
value 语法指定。
options:
-i
: (可选) 应打印继承的接口。(布尔值,false)-s
: (可选) 如果指定了类名,则打印子类。如果未指定类名,则仅打印超类。(布尔值,false)
arguments:
- classname: (可选) 应打印其层次结构的类的名称。如果未指定,则打印所有类层次结构。(字符串,无默认值)
VM.command_line
打印用于启动此 VM 实例的命令行。
影响:低
权限:java.lang.management.ManagementPermission(monitor)
VM.dynlibs
打印已加载的动态库。
影响:低
权限:java.lang.management.ManagementPermission(monitor)
VM.info
打印有关 JVM 环境和状态的信息。
影响:低
权限:java.lang.management.ManagementPermission(monitor)
VM.log
options
列出当前日志配置,启用/禁用/配置日志输出,或轮换所有日志。
影响:低
权限:java.lang.management.ManagementPermission(control)
options:
注意
以下 options 必须使用 key 或 key=
value 语法指定。
output
: (可选) 要配置的输出的名称或索引 (#)。(字符串,无默认值)output_options
: (可选) 输出的选项。(字符串,无默认值)what
: (可选) 配置要记录的标签。(字符串,无默认值)decorators
: (可选) 配置要使用的装饰器。使用 'none' 或空值删除所有装饰器。(字符串,无默认值)disable
: (可选) 关闭所有日志记录并清除日志配置。(布尔值,无默认值)list
: (可选) 列出当前日志配置。(布尔值,无默认值)rotate
: (可选) 轮换所有日志。(布尔值,无默认值)
VM.flags
options
打印 VM 标志选项及其当前值。
影响:低
权限:java.lang.management.ManagementPermission(monitor)
注意
以下 options 必须使用 key 或 key=
value 语法指定。
options:
-
-all
: (可选) 打印 VM 支持的所有标志(布尔值,false)。
VM.native_memory
options
打印本机内存使用情况
影响:中等
权限:java.lang.management.ManagementPermission(monitor)
注意
以下 options 必须使用 key 或 key=
value 语法指定。
options:
summary
: (可选) 请求运行时报告当前内存摘要,其中包括总保留内存和已提交内存,以及每个子系统的内存使用情况摘要。(布尔值,false)detail
: (可选) 请求运行时报告每个调用点的内存分配 >= 1K。(布尔值,false)baseline
: (可选) 请求运行时对当前内存使用情况进行基线,以便可以与以后的时间进行比较。(布尔值,false)summary.diff
: (可选) 请求运行时报告与先前基线相比的内存摘要比较。(布尔值,false)detail.diff
: (可选) 请求运行时报告与先前基线相比的内存详细信息比较,显示不同调用点处的内存分配活动。 (布尔值,false)shutdown
: (可选) 请求运行时关闭自身并释放运行时使用的内存。 (布尔值,false)statistics
: (可选) 打印跟踪器统计信息以用于调整目的。 (布尔值,false)scale
: (可选) 内存使用量以什么比例,KB、MB 或 GB (字符串,KB)
VM.print_touched_methods
打印在该 JVM 的生命周期中曾经被触及的所有方法。
影响:中等 --- 取决于 Java 内容。
VM.set_flag
arguments
使用提供的 value 设置 VM 标志选项。
影响:低
权限:java.lang.management.ManagementPermission(control)
arguments:
flag name: 要设置的标志的名称 (字符串,无默认值)
string value: (可选) 要设置的值 (字符串,无默认值)
VM.stringtable
options
转储字符串表。
影响:中等 - 取决于 Java 内容。
权限:java.lang.management.ManagementPermission(monitor)
注意
以下 options 必须使用 key 或 key=
value 语法指定。
options:
-
-verbose
: (可选) 转储表中每个字符串的内容 (布尔值,false)
VM.symboltable
options
转储符号表。
影响:中等 - 取决于 Java 内容。
权限:java.lang.management.ManagementPermission(monitor)
注意
以下 options 必须使用 key 或 key=
value 语法指定。
options:
-
-verbose
: (可选) 转储表中每个符号的内容 (布尔值,false)
VM.systemdictionary
打印字典哈希表大小和桶长度的统计信息。
影响:中等
权限:java.lang.management.ManagementPermission(monitor)
注意
以下 options 必须使用 key 或 key=
value 语法指定。
options:
-
verbose
: (可选) 转储所有类加载器的每个字典条目的内容 (布尔值,false)。
VM.system_properties
打印系统属性。
影响:低
权限:java.util.PropertyPermission(*, read)
VM.uptime
options
打印 VM 运行时间。
影响:低
注意
以下 options 必须使用 key 或 key=
value 语法指定。
options:
-
-date
: (可选) 添加带有当前日期的前缀 (布尔值,false)
VM.version
打印 JVM 版本信息。
影响:低
权限:java.util.PropertyPermission(java.vm.version, read)
最后更新: 2021 年 9 月 14 日