Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jcmd : where can I find complementary information

Tags:

java

jvm

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

jdk8

  • help
  • VM.uptime [options]
  • VM.flags [options]
  • VM.system_properties
  • VM.command_line
  • VM.version
  • VM.native_memory [options]
  • VM.check_commercial_features
  • VM.unlock_commercial_features
  • Thread.print [options]
  • GC.run
  • GC.run_finalization
  • GC.rotate_log
  • GC.class_stats [options]
  • GC.class_histogram [options]
  • GC.heap_dump [options]
  • ManagementAgent.start_local
  • ManagementAgent.start [options]
  • ManagementAgent.stopJFR.start [options]
  • JFR.stop [options]
  • JFR.dump [options]
  • JFR.check [options]

jdk9

only the additional

  • VM.set_flag [options]
  • VM.info
  • VM.class_hierarchy [options]
  • VM.dynlibs
  • VM.print_touched_methods
  • JVMTI.data_dump
  • JVMTI.agent_load [options]
  • GC.finalizer_info
  • GC.heap_info
  • ManagementAgent.status
  • ManagementAgent.stop
  • Compiler.queue
  • Compiler.codelist
  • Compiler.codecache
  • Compiler.directives_print
  • Compiler.directives_remove
  • Compiler.directives_add [options]
  • Compiler.directives_clear
like image 345
Romain Avatar asked Jan 27 '17 09:01

Romain


2 Answers

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.


help [options] [<command name>]

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.

  • Impact: Low
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)

VM.uptime [options]

Print VM uptime.

  • Impact: Low
Options: (options must be specified using the <key> or <key>=<value> syntax)
    -date : [optional] Add a prefix with current date (BOOLEAN, false)

VM.flags [options]

Print VM flag options and their current values.

  • Impact: Low
Options: (options must be specified using the <key> or <key>=<value> syntax)
    -all : [optional] Print all flags supported by the VM (BOOLEAN, false)

VM.system_properties

Print system properties.

  • Impact: Low

VM.command_line

Print the command line used to start this VM instance.

  • Impact: Low

VM.version

Print JVM version information.

  • Impact: Low

VM.native_memory [options]

Print native memory usage.

  • Impact: Medium
  • Requires: -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)

VM.check_commercial_features

Display status of commercial features.

  • Impact: Low: No impact

VM.unlock_commercial_features

Unlock commercial features.

  • Impact: Low: No impact

Thread.print [options]

Print all threads with stacktraces.

  • Impact: Medium: Depends on the number of threads.
Options: (options must be specified using the <key> or <key>=<value> syntax)
    -l : [optional] print java.util.concurrent locks (BOOLEAN, false)

GC.run

Call java.lang.System.gc().

  • Impact: Medium: Depends on Java heap size and content.

GC.run_finalization

Call java.lang.System.runFinalization().

  • Impact: Medium: Depends on Java content.

GC.rotate_log

Force the GC log file to be rotated.

  • Impact: Low
  • Requires: -Xloggc:<filename> -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=<num>

GC.class_stats [options] [<columns>]

Provide statistics about Java class meta data.

  • Impact: High: Depends on Java heap size and content.
  • Requires: -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)

GC.class_histogram [options]

Provide statistics about the Java heap usage.

  • Impact: High: Depends on Java heap size and content.
Options: (options must be specified using the <key> or <key>=<value> syntax)
    -all : [optional] Inspect all objects, including unreachable objects (BOOLEAN, false)

GC.heap_dump [options] <filename>

Generate a HPROF format dump of the Java heap.

  • Impact: High: Depends on Java heap size and content. Request a full GC unless the -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)

ManagementAgent.start_local

Start local management agent.

  • Impact: Low: No impact

ManagementAgent.start [options]

Start remote management agent.

  • Impact: Low: No impact
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)

ManagementAgent.stop

Stop remote management agent.

  • Impact: Low: No impact

JFR.start [options]

Starts a new JFR recording

  • Impact: Medium: Depending on the settings for a recording, the impact can range from low to high.
  • Requires: -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)

JFR.stop [options]

Stops a JFR recording

  • Impact: Low
  • Requires: -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)

JFR.dump [options]

Copies contents of a JFR recording to file. Either the name or the recording id must be specified.

  • Impact: Low
  • Requires: -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)

JFR.check [options]

Checks running JFR recording(s)

  • Impact: Low
  • Requires: -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)
like image 158
apangin Avatar answered Nov 04 '22 14:11

apangin


jcmd itself provides such information when applied on a specific Java process, and optionally a specific sub command.

How to get help:

  • First get java process lists via 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).
  • Then apply help sub command on a specific java process, e.g jcmd 8976 help, it will list available sub commands for the process.
  • Then, get help for a specific command on the process, e.g jcmd 8976 help Thread.print, it will print help of Thread.print sub command.
  • Then, execute the specific sub command on the process, e.g 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

like image 34
user218867 Avatar answered Nov 04 '22 14:11

user218867