jcmd命令

    向运行中额JVM发送命令请求诊断信息。

概要

jcmd [-l|-h|-help]

jcmd pid|main-class PerfCounter.print

jcmd pid|main-class -f filename

jcmd pid|main-class command[ arguments]

描述

    jcmd工具用于向JVM发送诊断请求。必须在本地JVM上使用,且要有与运行JVM同样的用户和组别。

注意:

    如需远程调用或不同身份调用,参考com.sun.management.DiagnosticCommandMBean接口。DiagnosticCommandMBeanAPI文档

    若不带参或使用-l运行jcmd*,则会打印运行中java进程id和启动时的main class。使用-h-help*打印帮助信息。

1
2
3
% jcmd
11810 com.lyyljs.demo.Application 9330
19332 sun.tools.jcmd.JCmd

    如果第一个参数指定了pid或main class,jcmd会发送请求到指定进程(pid或所有main class名称相同的进程)。也可以使用0指代所有可达Java进程。可选命令选项如下:

-l
    打印运行中java进程id和启动时的main class

Perfcounter.print

    打印目标进程的性能计数器。

-f filename

    储存有执行命令的文件。每行一个命令。以#开头的行会被忽略。所有行读取结束或含有stop关键字的行时停止执行。

command [arguments]

    可选执行命令。使用help命令查看该进程可选诊断命令。在命令后面使用help*参数可查看该命令帮助信息。如果参数包含空格需要用包起来。当需要这两个符号当字符解析时使用转义符*。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
% jcmd 0 help
11810: #pid
The following commands are available:
JFR.stop #停止JFR
JFR.start #JFR开始
JFR.dump #dump JFR信息
JFR.check #检查JFR状态
VM.native_memory #打印跟踪本地内存 需要指定-XX:NativeMemoryTracking不为off
VM.check_commercial_features #检查商业特性是否解锁
VM.unlock_commercial_features #解锁商业特性
ManagementAgent.stop #停止JMX Agent
ManagementAgent.start_local #开启本地JMX Agent
ManagementAgent.start #开启JMX Agent
GC.rotate_log #GC日志转储
Thread.print #打印线程栈信息信息,等于jstack <PID>
GC.class_stats #转储Java类元数据的详细统计,需要打开-XX:+UnlockDiagnosticVMOptions
GC.class_histogram #打印堆直方图,等于jmap -histo <PID>
GC.heap_dump #打印堆dump信息,等于jmap -dump:format=b,file=filename <PID>
GC.run_finalization #强制调用已经失去引用的对象的finalize方法,等与System.runFinalization()
GC.run #告诉垃圾收集器打算进行垃圾收集,等与System.gc();
VM.uptime #打印VM启动至今的时间,单位秒
VM.flags #打印虚拟机运行参数(flags),同jinfo -flags <PID>, jinfo -flag <VM FLAG> <PID>
VM.system_properties #打印环境变量 同jinfo -sysprops <PID>
VM.command_line #打印虚拟机参数(args,command,initial class path,Launcher Type),同jinfo -sysprops <PID> | grep command
VM.version #打印虚拟机版本信息,同jinfo -sysprops <PID> | grep version
help #打印帮助信息

引用

Oracle jcmd文档