jcmd is a promising tool regrouping utilities of jmap, jsp, etc...
You can find introduction and man page but still it's very light.
On the web, I found apparently existing commands like GC.heap_info, that I've never been able to use for my tests.
Some of these commands need special flags. -XX:NativeMemoryTracking=detail
will give you VM.native_memory
command, for instance.
But for some others it's not clear how to activate them or if it depends of the jdk version, etc..
I can't even find an exhaustive list of existing command.
Any info?
Edit Thx to @apangin response, I've started to compute a short summary of available commands by jvm version.
Disclaimer : it comes from code teardown only, not real test
only the additional
Basing on @EricWang's answer, HotSpot diagnostic command sources and the personal experience, I've created the full list of jcmd
commands available in JDK 8u121 with the additional details about requirements etc.
For more information about a specific command use help <command>
. With no argument this will show a list of available commands. help -all
will show help for all commands.
Arguments:
command name : [optional] The name of the command for which we want help (STRING, no default value)
Options: (options must be specified using the <key> or <key>=<value> syntax)
-all : [optional] Show help for all commands (BOOLEAN, false)
Print VM uptime.
Options: (options must be specified using the <key> or <key>=<value> syntax)
-date : [optional] Add a prefix with current date (BOOLEAN, false)
Print VM flag options and their current values.
Options: (options must be specified using the <key> or <key>=<value> syntax)
-all : [optional] Print all flags supported by the VM (BOOLEAN, false)
Print system properties.
Print the command line used to start this VM instance.
Print JVM version information.
Print native memory usage.
-XX:NativeMemoryTracking=[summary|detail]
Options: (options must be specified using the <key> or <key>=<value> syntax)
summary : [optional] request runtime to report current memory summary, which includes total reserved and committed memory, along with memory usage summary by each subsytem. (BOOLEAN, false)
detail : [optional] request runtime to report memory allocation >= 1K by each callsite. (BOOLEAN, false)
baseline : [optional] request runtime to baseline current memory usage, so it can be compared against in later time. (BOOLEAN, false)
summary.diff : [optional] request runtime to report memory summary comparison against previous baseline. (BOOLEAN, false)
detail.diff : [optional] request runtime to report memory detail comparison against previous baseline, which shows the memory allocation activities at different callsites. (BOOLEAN, false)
shutdown : [optional] request runtime to shutdown itself and free the memory used by runtime. (BOOLEAN, false)
statistics : [optional] print tracker statistics for tuning purpose. (BOOLEAN, false)
scale : [optional] Memory usage in which scale, KB, MB or GB (STRING, KB)
Display status of commercial features.
Unlock commercial features.
Print all threads with stacktraces.
Options: (options must be specified using the <key> or <key>=<value> syntax)
-l : [optional] print java.util.concurrent locks (BOOLEAN, false)
Call java.lang.System.gc().
Call java.lang.System.runFinalization().
Force the GC log file to be rotated.
-Xloggc:<filename> -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=<num>
Provide statistics about Java class meta data.
-XX:+UnlockDiagnosticVMOptions
Arguments:
columns : [optional] Comma-separated list of all the columns to show. If not specified, the following columns are shown: InstBytes,KlassBytes,CpAll,annotations,MethodCount,Bytecodes,MethodAll,ROAll,RWAll,Total (STRING, no default value)
Options: (options must be specified using the <key> or <key>=<value> syntax)
-all : [optional] Show all columns (BOOLEAN, false)
-csv : [optional] Print in CSV (comma-separated values) format for spreadsheets (BOOLEAN, false)
-help : [optional] Show meaning of all the columns (BOOLEAN, false)
Provide statistics about the Java heap usage.
Options: (options must be specified using the <key> or <key>=<value> syntax)
-all : [optional] Inspect all objects, including unreachable objects (BOOLEAN, false)
Generate a HPROF format dump of the Java heap.
-all
option is specified.Arguments:
filename : Name of the dump file (STRING, no default value)
Options: (options must be specified using the <key> or <key>=<value> syntax)
-all : [optional] Dump all objects, including unreachable objects (BOOLEAN, false)
Start local management agent.
Start remote management agent.
Options: (options must be specified using the <key> or <key>=<value> syntax)
config.file : [optional] set com.sun.management.config.file (STRING, no default value)
jmxremote.host : [optional] set com.sun.management.jmxremote.host (STRING, no default value)
jmxremote.port : [optional] set com.sun.management.jmxremote.port (STRING, no default value)
jmxremote.rmi.port : [optional] set com.sun.management.jmxremote.rmi.port (STRING, no default value)
jmxremote.ssl : [optional] set com.sun.management.jmxremote.ssl (STRING, no default value)
jmxremote.registry.ssl : [optional] set com.sun.management.jmxremote.registry.ssl (STRING, no default value)
jmxremote.authenticate : [optional] set com.sun.management.jmxremote.authenticate (STRING, no default value)
jmxremote.password.file : [optional] set com.sun.management.jmxremote.password.file (STRING, no default value)
jmxremote.access.file : [optional] set com.sun.management.jmxremote.access.file (STRING, no default value)
jmxremote.login.config : [optional] set com.sun.management.jmxremote.login.config (STRING, no default value)
jmxremote.ssl.enabled.cipher.suites : [optional] set com.sun.management.jmxremote.ssl.enabled.cipher.suite (STRING, no default value)
jmxremote.ssl.enabled.protocols : [optional] set com.sun.management.jmxremote.ssl.enabled.protocols (STRING, no default value)
jmxremote.ssl.need.client.auth : [optional] set com.sun.management.jmxremote.need.client.auth (STRING, no default value)
jmxremote.ssl.config.file : [optional] set com.sun.management.jmxremote.ssl_config_file (STRING, no default value)
jmxremote.autodiscovery : [optional] set com.sun.management.jmxremote.autodiscovery (STRING, no default value)
jdp.port : [optional] set com.sun.management.jdp.port (INT, no default value)
jdp.address : [optional] set com.sun.management.jdp.address (STRING, no default value)
jdp.source_addr : [optional] set com.sun.management.jdp.source_addr (STRING, no default value)
jdp.ttl : [optional] set com.sun.management.jdp.ttl (INT, no default value)
jdp.pause : [optional] set com.sun.management.jdp.pause (INT, no default value)
jdp.name : [optional] set com.sun.management.jdp.name (STRING, no default value)
Stop remote management agent.
Starts a new JFR recording
-XX:+UnlockCommercialFeatures
Options: (options must be specified using the <key> or <key>=<value> syntax)
name : [optional] Name that can be used to identify recording, e.g. "My Recording" (STRING, no default value)
defaultrecording : [optional] Starts the default recording, can only be combined with settings. (BOOLEAN, false)
dumponexit : [optional] Dump running recording when JVM shuts down (BOOLEAN, no default value)
settings : [optional] Settings file(s), e.g. profile or default. See JRE_HOME/lib/jfr (STRING SET, no default value)
delay : [optional] Delay recording start with (s)econds, (m)inutes), (h)ours), or (d)ays, e.g. 5h. (NANOTIME, 0)
duration : [optional] Duration of recording in (s)econds, (m)inutes, (h)ours, or (d)ays, e.g. 300s. (NANOTIME, 0)
filename : [optional] Resulting recording filename, e.g. "C:\Users\user\My Recording.jfr" (STRING, no default value)
compress : [optional] GZip-compress the resulting recording file (BOOLEAN, false)
maxage : [optional] Maximum time to keep recorded data (on disk) in (s)econds, (m)inutes, (h)ours, or (d)ays, e.g. 60m, or 0 for no limit (NANOTIME, 0)
maxsize : [optional] Maximum amount of bytes to keep (on disk) in (k)B, (M)B or (G)B, e.g. 500M, or 0 for no limit (MEMORY SIZE, 0)
Stops a JFR recording
-XX:+UnlockCommercialFeatures
Options: (options must be specified using the <key> or <key>=<value> syntax)
name : [optional] Recording name,.e.g "My Recording" (STRING, no default value)
recording : [optional] Recording number, see JFR.check for a list of available recordings (JLONG, -1)
discard : [optional] Skip writing data to previously specified file (if any) (BOOLEAN, false)
filename : [optional] Copy recording data to file, e.g. "C:\Users\user\My Recording.jfr" (STRING, no default value)
compress : [optional] GZip-compress "filename" destination (BOOLEAN, false)
Copies contents of a JFR recording to file. Either the name or the recording id must be specified.
-XX:+UnlockCommercialFeatures
Options: (options must be specified using the <key> or <key>=<value> syntax)
name : [optional] Recording name, e.g. "My Recording" (STRING, no default value)
recording : [optional] Recording number, use JFR.check to list available recordings (JLONG, -1)
filename : Copy recording data to file, i.e "C:\Users\user\My Recording.jfr" (STRING, no default value)
compress : [optional] GZip-compress "filename" destination (BOOLEAN, false)
Checks running JFR recording(s)
-XX:+UnlockCommercialFeatures
Options: (options must be specified using the <key> or <key>=<value> syntax)
name : [optional] Recording name, e.g. "My Recording" or omit to see all recordings (STRING, no default value)
recording : [optional] Recording number, or omit to see all recordings (JLONG, -1)
verbose : [optional] Print event settings for the recording(s) (BOOLEAN, false)
jcmd
itself provides such information when applied on a specific Java process, and optionally a specific sub command.
How to get help:
jps
or jcmd -l
, if you don't know the pid of target java process yet, (e.g I will take java process with pid 8976 as example in subsequent steps).
help
sub command on a specific java process, e.g jcmd 8976 help
, it will list available sub commands for the process.jcmd 8976 help Thread.print
, it will print help of Thread.print
sub command.jcmd 8976 Thread.print
or jcmd 8976 Thread.print | less -N
By the way, just as you mentioned, following link describes jcmd command briefly: https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr006.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With