名称
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命令。通过运行help命令(jcmdpidhelp)获取jcmd的可用命令列表,其中pid是正在运行的Java进程的进程ID。如果pid为0,则命令将发送到所有Java进程。主类参数将用于部分或完全匹配用于启动Java的类。如果没有给出选项,则列出了正在运行的Java进程标识符以及用于启动进程的主类和命令行参数(与使用-l相同)。 -
Perfcounter.print - 打印指定Java进程公开的性能计数器。
-
-ffilename - 从指定文件filename读取并执行命令。
-
-l -
显示未在单独的docker进程中运行的Java虚拟机进程标识符列表,以及用于启动进程的主类和命令行参数。如果JVM在docker进程中,则必须使用诸如
ps之类的工具查找PID。注意:
使用无参数的
jcmd与使用jcmd -l相同。 -
-h -
显示
jcmd实用程序的命令行帮助。
描述
jcmd实用程序用于向JVM发送诊断命令请求。必须在运行JVM的同一台机器上使用,并且必须具有启动JVM时使用的相同有效用户和组标识符。每个诊断命令都有自己的一组参数。要显示诊断命令的描述、语法和可用参数列表,请使用命令名称作为参数。例如:
jcmdpidhelpcommand
如果参数包含空格,则必须用单引号或双引号('或")括起来。此外,必须使用反斜杠(\)转义单引号或双引号,以防止操作系统shell处理引号。或者,您可以用单引号括起这些参数,然后用双引号括起(或用双引号括起,然后用单引号括起)这些参数。
如果将进程标识符(pid)或主类(main-class)指定为第一个参数,则jcmd实用程序将诊断命令请求发送到具有指定标识符的Java进程或具有指定主类名称的所有Java进程。还可以通过将0指定为进程标识符,将诊断命令请求发送到所有可用的Java进程。
jcmd的命令
command必须是所选JVM的有效jcmd诊断命令。通过运行help命令(jcmd pid help)获取jcmd的可用命令列表,其中pid是正在运行的Java进程的进程ID。如果pid为0,则命令将发送到所有Java进程。主类参数将用于部分或完全匹配用于启动Java的类。如果没有给出选项,则列出了正在运行的Java进程标识符,这些进程不在单独的docker进程中,以及用于启动进程的主类和命令行参数(与使用-l相同)。
以下命令可用:
-
帮助[选项] [参数] -
获取有关特定命令的更多信息。
参数:
- 命令名称:我们想要帮助的命令的名称(STRING,无默认值)
注意:
以下选项必须使用key或key
=value语法指定。选项:
-all:(可选)显示所有命令的帮助(BOOLEAN,false)。
-
编译器.codecache -
打印代码缓存布局和边界。
影响:低
-
编译器.codelist -
打印代码缓存中所有存活的已编译方法。
影响:中等
-
编译器.perfmap(仅限Linux) -
为Linux perf工具编写映射文件。
影响:低
-
编译器.queue -
打印排队等待编译的方法。
影响:低
-
编译器.directives_add *filename* *arguments* -
从文件中添加编译器指令。
影响:低
参数:
文件名:指令文件的名称(STRING,无默认值)
-
编译器.directives_clear -
删除所有编译器指令。
影响:低
-
编译器.directives_print -
打印所有活动的编译器指令。
影响:低
-
编译器.directives_remove -
删除最近添加的编译器指令。
影响:低
-
GC.class_histogram[选项] -
提供有关Java堆使用情况的统计信息。
影响:高 --- 取决于Java堆大小和内容。
注意:
必须使用key或key
=value语法指定选项。选项:
-all:(可选)检查所有对象,包括不可达对象(BOOLEAN,false)-parallel:(可选)用于堆检查的并行线程数。 0(默认值)表示让VM确定要使用的线程数。 1表示使用一个线程(禁用并行性)。 对于任何其他值,VM将尝试使用指定数量的线程,但可能使用较少的线程。 (INT,0)
-
GC.finalizer_info -
提供有关Java终结器队列的信息。
影响:中等
-
GC.heap_dump[选项] [参数] -
生成Java堆的HPROF格式转储。
影响:高 --- 取决于Java堆大小和内容。 除非指定
-all选项,否则请求完整GC。注意:
必须使用key或key
=value语法指定以下选项。选项:
-all:(可选)转储所有对象,包括不可达对象(BOOLEAN,false)-gz:(可选)如果指定,则使用给定的压缩级别以gzipped格式编写堆转储。 1(推荐)是最快的,9是最强的压缩。 (INT,1)-overwrite:(可选)如果指定,如果存在转储文件,将覆盖该文件(BOOLEAN,false)
参数:
- 文件名:转储文件的名称(STRING,无默认值)
-
GC.heap_info -
提供通用的Java堆信息。
影响:中等
-
GC.run -
调用
java.lang.System.gc()。影响:中等 --- 取决于Java堆大小和内容。
-
GC.run_finalization -
调用
java.lang.System.runFinalization()。影响:中等 --- 取决于Java内容。
-
JFR.check[选项] -
显示有关正在运行的飞行记录的信息
影响:低
注意:
必须使用key或key
=value语法指定选项。 如果未输入任何参数,则显示所有活动记录的信息。选项:
-
name:(可选)飞行记录的名称。 (STRING,无默认值) -
verbose:(可选)用于打印记录的事件设置的标志(BOOLEAN,false)
-
-
JFR.configure[选项] -
设置飞行记录的参数
影响:低
注意:
必须使用key或key
=value语法指定选项。 如果未输入任何参数,则显示当前设置。选项:
-
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。 在Windows上,临时目录由TMP环境变量指定。) -
preserve-repository={true|false}:指定在JVM退出后是否应保留磁盘存储库中的文件。 如果为false,则文件将被删除。 默认情况下,此参数已禁用。 -
stackdepth:(可选)堆栈跟踪的堆栈深度。 将此值设置为大于默认值64可能会导致性能下降。 一旦初始化了JFR,就无法更改此值。 (LONG,64) -
thread_buffer_size:(可选)每个线程的本地缓冲区大小,如果未使用以下后缀之一:'k'或'K'表示千字节,'m'或'M'表示兆字节。 覆盖此参数可能会降低性能,不建议使用。 一旦初始化了JFR,就无法更改此值。 (STRING,8k) -
samplethreads:(可选)激活线程采样的标志。 (BOOLEAN,true)
-
-
JFR.dump[选项] -
在运行飞行记录时将数据写入文件
影响:低
注意:
必须使用key或key
=value语法指定选项。 不需要任何选项。 写入数据后,记录将继续运行。选项:
-
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时间对应于飞行记录数据中找到的时间戳。另一个选项是使用相对于当前时间的时间,由负整数后跟“s”、“m”或“h”指定。 例如,“-12h”,“-15m”或“-30s”
-
filename:(可选)将飞行记录数据转储到的文件的名称。 如果未提供文件名,则从PID和当前日期生成文件名。 文件名也可以是一个目录,在这种情况下,文件名将从PID和指定目录中的当前日期生成。 如果文件名中指定了%p和/或%t,则它会扩展为JVM的PID和当前时间戳。 (STRING,无默认值) -
maxage:(可选)将飞行记录数据转储到文件的时间长度。 (整数后跟's'表示秒,'m'表示分钟或'h'表示小时,无默认值) -
maxsize:(可选)从飞行记录中转储的数据量的最大大小,如果未使用以下后缀之一:'m'或'M'表示兆字节,'g'或'G'表示千兆字节。 (STRING,无默认值) -
name:(可选)记录的名称。 如果未提供名称,则转储所有记录的数据。 (STRING,无默认值) -
path-to-gc-root:(可选)保存在转储记录数据时垃圾收集(GC)根路径的标志。 路径信息对于查找内存泄漏很有用,但收集它可能会导致应用程序暂停一小段时间。 仅在怀疑应用程序存在内存泄漏时才打开此标志。 (BOOLEAN,false)
-
-
JFR.start[选项] -
开始飞行记录
影响:低
注意:
必须使用key或key
=value语法指定options。如果未输入任何参数,则使用默认值开始记录。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和指定目录中的当前日期生成。如果文件名中指定了%p和/或%t,则会扩展为JVM的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中,则包含路径。以下配置文件包含在JDK的JAVA-HOME/lib/jfr目录中:'default.jfc':使用低开销收集预定义信息,因此对性能影响很小,并且可用于连续运行的记录;'profile.jfc':提供比'default.jfc'配置文件更多的数据,但对性能有更大影响。当需要更多信息时,可以短时间使用此配置。使用none启动没有预定义配置文件的记录。 (字符串,JAVA-HOME/lib/jfr/default.jfc)
事件设置和.jfc选项可以使用以下语法指定:
-
option:(可选)指定要修改的选项值。要列出可用选项,请使用JAVA_HOME/bin/jfr工具。 -
event-setting:(可选)指定要修改的事件设置值。使用形式:<event-name>#<setting-name>=<value>要添加新的事件设置,请使用'+'前缀事件名称。
可以通过使用空格分隔符为多个事件设置和.jfc选项指定值。在参数和.jfc选项之间存在冲突时,参数将优先。对于时间跨度值,即20ms,可以省略空格分隔符。有关设置语法的更多信息,请参阅jdk.jfr包的Javadoc。
-
-
JFR.stop[options] -
停止飞行记录
影响:低
注意:
必须使用key或key
=value语法指定options。如果未输入任何参数,则不会停止任何记录。options:
-
filename:(可选)停止记录时写入记录的文件名。如果文件名中指定了%p和/或%t,则会扩展为JVM的PID和当前时间戳。如果未提供路径,则来自记录的数据将被丢弃。 (字符串,无默认值) -
name:(可选)记录的名称(字符串,无默认值)
-
-
JVMTI.agent_load[arguments] -
加载JVMTI本机代理。
影响:低
arguments:
-
library path:要加载的JVMTI代理的绝对路径。 (字符串,无默认值)
-
agent option:(可选)传递代理的选项字符串。 (字符串,无默认值)
-
-
JVMTI.data_dump -
发出JVM进行JVMTI数据转储请求。
影响:高
-
ManagementAgent.start[options] -
启动远程管理代理。
影响:低 --- 无影响
注意:
必须使用key或key
=value语法指定以下options。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 -
打印管理代理状态。
影响:低 --- 无影响
-
ManagementAgent.stop -
停止远程管理代理。
影响:低 --- 无影响
-
System.native_heap_info(仅限Linux) -
通过malloc_info(3)打印有关本机堆使用情况的信息。
影响:低
-
System.trim_native_heap(仅限Linux) -
尝试通过修剪C堆来释放内存。
影响:低
-
Thread.print[options] -
打印所有带有堆栈跟踪的线程。
影响:中等 --- 取决于线程数量。
注意:
必须使用key或key
=value语法指定以下options。options:
-e:(可选)打印扩展线程信息(布尔值,false)-l:(可选)打印java.util.concurrent锁(布尔值,false)
-
VM.cds[arguments] -
转储包含当前加载的所有类的静态或动态共享存档。
影响:中等 --- 暂停时间取决于加载的类数量
参数:
subcmd:必须是static_dump或dynamic_dump(STRING,无默认值)filename:(可选)要转储的共享存档的名称(STRING,无默认值)
如果未指定
filename,将使用目标JVM进程的pid选择默认文件名。例如,java_pid1234_static.jsa,java_pid5678_dynamic.jsa等。如果未指定
filename作为绝对路径,则存档文件将在相对于目标JVM进程的当前目录的目录中创建。如果指定了
dynamic_dump,则目标JVM必须使用JVM选项-XX:+RecordDynamicDumpInfo启动。 -
VM.classloaders[选项] -
打印类加载器层次结构。
影响:中等 --- 取决于类加载器和加载的类数量。
必须使用以下选项,使用key或key
=value语法指定。选项:
show-classes:(可选)打印已加载的类(BOOLEAN,false)verbose:(可选)打印详细信息(BOOLEAN,false)fold:(可选)将具有相同名称和类的加载器显示为一个(BOOLEAN,true)
-
VM.classloader_stats -
打印有关所有类加载器的统计信息。
影响:低
-
VM.class_hierarchy[选项] [参数] -
打印所有已加载类的列表,缩进显示类层次结构。每个类的名称后面跟着其ClassLoaderData*,如果由引导类加载器加载,则为“null”。
影响:中等 --- 取决于加载的类数量。
注意:
必须使用以下选项,使用key或key
=value语法指定。选项:
-
-i:(可选)应打印继承的接口(BOOLEAN,false) -
-s:(可选)如果指定了类名,则除了其超类外,还打印其子类。如果没有此选项,将仅打印超类(BOOLEAN,false)
参数:
- classname:(可选)应打印其层次结构的类的名称。如果未指定,则打印所有类层次结构(STRING,无默认值)
-
-
VM.command_line -
打印用于启动此VM实例的命令行。
影响:低
-
VM.dynlibs -
打印加载的动态库。
影响:低
-
VM.events[选项] -
打印VM事件日志
影响:低 --- 取决于事件日志大小。
选项:
注意:
必须使用以下选项,使用key或key
=value语法指定。log:(可选)要打印的日志名称。如果省略,将打印所有日志(STRING,无默认值)max:(可选)要打印的事件的最大数量(最新的在前)。如果省略,将打印所有事件(STRING,无默认值)
-
VM.info -
打印有关JVM环境和状态的信息。
影响:低
-
VM.log[选项] -
列出当前的日志配置,启用/禁用/配置日志输出,或旋转所有日志。
影响:低
选项:
注意:
必须使用以下选项,使用key或key
=value语法指定。-
output:(可选)要配置的输出的名称或索引(#)(STRING,无默认值) -
output_options:(可选)输出的选项(STRING,无默认值) -
what:(可选)配置要记录的标记(STRING,无默认值) -
decorators:(可选)配置要使用的装饰器。使用'none'或空值删除所有装饰器(STRING,无默认值) -
disable:(可选)关闭所有日志记录并清除日志配置(BOOLEAN,无默认值) -
list:(可选)列出当前的日志配置(BOOLEAN,无默认值) -
rotate:(可选)旋转所有日志(BOOLEAN,无默认值)
-
-
VM.flags[选项] -
打印VM标志选项及其当前值。
影响:低
注意:
必须使用以下选项,使用key或key
=value语法指定。选项:
-all:(可选)打印VM支持的所有标志(BOOLEAN,false)。
-
VM.metaspace[选项] -
打印元空间的统计信息
影响:中等 --- 取决于加载的类数量。
注意:
必须使用以下选项,使用key或key
=value语法指定。选项:
basic:(可选)打印基本摘要(不需要安全点)。 (BOOLEAN,false)show-loaders:(可选)按类加载器显示使用情况。 (BOOLEAN,false)show-classes:(可选)如果设置了show-loaders,则显示每个加载器的加载类。 (BOOLEAN,false)by-chunktype:(可选)按块类型拆分数字。 (BOOLEAN,false)by-spacetype:(可选)按加载器类型拆分数字。 (BOOLEAN,false)vslist:(可选)显示有关底层虚拟空间的详细信息。 (BOOLEAN,false)scale:(可选)要缩放的内存使用情况。有效值为:1、KB、MB或GB(固定比例),或“dynamic”以动态选择比例。 (STRING,dynamic)
-
VM.native_memory[选项] -
打印本机内存使用情况
影响:中等
注意:
必须使用以下选项,使用key或key
=value语法指定。选项:
-
summary:(可选)请求运行时报告当前内存摘要,其中包括总保留和已提交内存,以及每个子系统的内存使用摘要。 (BOOLEAN,false) -
detail:(可选)请求运行时报告每个调用点的内存分配≥1K。 (BOOLEAN,false) -
baseline:(可选)请求运行时基线当前内存使用情况,以便以后进行比较。 (BOOLEAN,false) -
summary.diff:(可选)请求运行时报告与先前基线的内存摘要比较。 (BOOLEAN,false) -
detail.diff:(可选)请求运行时报告与先前基线的内存详细比较,显示不同调用点的内存分配活动。 (BOOLEAN,false) -
statistics:(可选)打印用于调整目的的跟踪器统计信息。 (BOOLEAN,false) -
scale:(可选)内存使用情况,KB、MB或GB(STRING,KB)
-
-
VM.print_touched_methods -
打印在此JVM生命周期中曾经被访问过的所有方法。
影响:中等 --- 取决于Java内容。
-
VM.set_flag[参数] -
使用提供的值设置VM标志选项。
影响:低
参数:
-
flag name:要设置的标志的名称(STRING,无默认值)
-
string value:(可选)要设置的值(STRING,无默认值)
-
-
VM.stringtable[选项] -
转储字符串表。
影响:中等 --- 取决于Java内容。
注意:
必须使用以下选项,使用key或key
=value语法指定。选项:
-verbose:(可选)转储表中每个字符串的内容(BOOLEAN,false)
-
VM.symboltable[选项] -
转储符号表。
影响:中等 --- 取决于Java内容。
注意:
必须使用以下选项,使用key或key
=value语法)指定。选项:
-verbose:(可选)转储表中每个符号的内容(BOOLEAN,false)
-
VM.systemdictionary -
打印字典哈希表大小和桶长度的统计信息。
影响:中等
注意:
必须使用以下选项,使用key或key
=value语法指定。选项:
verbose:(可选)为所有类加载器转储每个字典条目的内容(BOOLEAN,false)。
-
VM.system_properties -
打印系统属性。
影响:低
-
VM.uptime[选项] -
打印VM的正常运行时间。
影响:低
注意:
必须使用以下选项,使用key或key
=value语法指定。选项:
-date:(可选)添加当前日期的前缀(BOOLEAN,false)
-
VM.version -
打印JVM版本信息。
影响:低