daiwei@daiweideMacBook-Pro ~ % jinfo -help Usage: jinfo [option] <pid> (to connect to running process) jinfo [option] <executable <core> (to connect to a core file) jinfo [option] [server_id@]<remote server IP or hostname> (to connect to remote debug server)
where <option> is one of: -flag <name> to print the value of the named VM flag -flag [+|-]<name> to enable or disable the named VM flag -flag <name>=<value> to set the named VM flag to the given value -flags to print VM flags -sysprops to print Java system properties <no option> to print both of the above -h | -help to printthis help message daiwei@daiweideMacBook-Pro ~ % jinfo -flalgs 8386 Java System Properties: #Thu May 2023:25:31 CST 2021 java.runtime.name=Java(TM) SE Runtime Environment sun.boot.library.path=/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib java.vm.version=25.231-b11 gopherProxySet=false java.vm.vendor=Oracle Corporation java.vendor.url=http\://java.oracle.com/ path.separator=\: java.vm.name=Java HotSpot(TM) 64-Bit Server VM file.encoding.pkg=sun.io user.country=CN sun.java.launcher=SUN_STANDARD sun.os.patch.level=unknown java.vm.specification.name=Java Virtual Machine Specification user.dir=/Users/daiwei/github/thinking-in-code java.runtime.version=1.8.0_231-b11 java.awt.graphicsenv=sun.awt.CGraphicsEnvironment java.endorsed.dirs=/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/endorsed os.arch=x86_64 java.io.tmpdir=/var/folders/4_/dbqw6z6100535snfk5508v080000gn/T/ line.separator=\n java.vm.specification.vendor=Oracle Corporation os.name=Mac OS X sun.jnu.encoding=UTF-8 java.library.path=/Users/daiwei/Library/Java/Extensions\:/Library/Java/Extensions\:/Network/Library/Java/Extensions\:/System/Library/Java/Extensions\:/usr/lib/java\:. sun.nio.ch.bugLevel= java.specification.name=Java Platform API Specification java.class.version=52.0 sun.management.compiler=HotSpot 64-Bit Tiered Compilers os.version=10.16 user.home=/Users/daiwei user.timezone=Asia/Shanghai java.awt.printerjob=sun.lwawt.macosx.CPrinterJob file.encoding=UTF-8 java.specification.version=1.8 java.class.path=/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/charsets.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/deploy.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/cldrdata.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/dnsns.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/jaccess.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/jfxrt.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/localedata.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/nashorn.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/sunec.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/zipfs.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/javaws.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/jce.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/jfr.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/jfxswt.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/jsse.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/management-agent.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/plugin.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/resources.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/rt.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/ant-javafx.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/dt.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/javafx-mx.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/jconsole.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/packager.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/sa-jdi.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/tools.jar\:/Users/daiwei/github/thinking-in-code/thinking-in-grpc/target/classes\:/Users/daiwei/.m2/repository/io/grpc/grpc-netty-shaded/1.34.1/grpc-netty-shaded-1.34.1.jar\:/Users/daiwei/.m2/repository/io/grpc/grpc-core/1.34.1/grpc-core-1.34.1.jar\:/Users/daiwei/.m2/repository/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar\:/Users/daiwei/.m2/repository/io/perfmark/perfmark-api/0.19.0/perfmark-api-0.19.0.jar\:/Users/daiwei/.m2/repository/io/grpc/grpc-protobuf/1.34.1/grpc-protobuf-1.34.1.jar\:/Users/daiwei/.m2/repository/io/grpc/grpc-api/1.34.1/grpc-api-1.34.1.jar\:/Users/daiwei/.m2/repository/io/grpc/grpc-context/1.34.1/grpc-context-1.34.1.jar\:/Users/daiwei/.m2/repository/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar\:/Users/daiwei/.m2/repository/com/google/protobuf/protobuf-java/3.14.0/protobuf-java-3.14.0.jar\:/Users/daiwei/.m2/repository/com/google/api/grpc/proto-google-common-protos/1.17.0/proto-google-common-protos-1.17.0.jar\:/Users/daiwei/.m2/repository/io/grpc/grpc-protobuf-lite/1.34.1/grpc-protobuf-lite-1.34.1.jar\:/Users/daiwei/.m2/repository/com/google/guava/guava/29.0-android/guava-29.0-android.jar\:/Users/daiwei/.m2/repository/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar\:/Users/daiwei/.m2/repository/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar\:/Users/daiwei/.m2/repository/org/checkerframework/checker-compat-qual/2.5.5/checker-compat-qual-2.5.5.jar\:/Users/daiwei/.m2/repository/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar\:/Users/daiwei/.m2/repository/com/google/errorprone/error_prone_annotations/2.3.4/error_prone_annotations-2.3.4.jar\:/Users/daiwei/.m2/repository/org/codehaus/mojo/animal-sniffer-annotations/1.18/animal-sniffer-annotations-1.18.jar\:/Users/daiwei/.m2/repository/io/grpc/grpc-stub/1.34.1/grpc-stub-1.34.1.jar\:/Users/daiwei/.m2/repository/com/google/protobuf/protobuf-java-util/3.12.0/protobuf-java-util-3.12.0.jar\:/Users/daiwei/.m2/repository/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar\:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar user.name=daiwei java.vm.specification.version=1.8 sun.java.command=io.daiwei.grpc.HelloServer java.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre sun.arch.data.model=64 user.language=zh java.specification.vendor=Oracle Corporation awt.toolkit=sun.lwawt.macosx.LWCToolkit java.vm.info=mixed mode java.version=1.8.0_231 java.ext.dirs=/Users/daiwei/Library/Java/Extensions\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext\:/Library/Java/Extensions\:/Network/Library/Java/Extensions\:/System/Library/Java/Extensions\:/usr/lib/java sun.boot.class.path=/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/resources.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/rt.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/sunrsasign.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/jsse.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/jce.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/charsets.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/jfr.jar\:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/classes java.vendor=Oracle Corporation file.separator=/ java.vendor.url.bug=http\://bugreport.sun.com/bugreport/ sun.io.unicode.encoding=UnicodeBig sun.cpu.endian=little sun.cpu.isalist=
Definitions: <option> An option reported by the -options option <vmid> Virtual Machine Identifier. A vmid takes the following form: <lvmid>[@<hostname>[:<port>]] Where <lvmid> is the local vm identifier for the target Java virtual machine, typically a process id; <hostname> is the name of the host running the target Java virtual machine; and <port> is the port number for the rmiregistry on the target host. See the jvmstat documentation for a more complete description of the Virtual Machine Identifier. <lines> Number of samples between header lines. <interval> Sampling interval. The following forms are allowed: <n>["ms"|"s"] Where <n> is an integer and the suffix specifies the units as milliseconds("ms") or seconds("s"). The default units are "ms". <count> Number of samples to take before terminating. -J<flag> Pass <flag> directly to the runtime system. -? -h --help Prints this help message. -help Prints this help message.
daiwei@daiweideMacBook-Pro ~ % jmap -help Usage: jmap -clstats <pid> to connect to running process and print class loader statistics jmap -finalizerinfo <pid> to connect to running process and print information on objects awaiting finalization jmap -histo[:live] <pid> to connect to running process and print histogram of java object heap if the "live"suboption is specified, only count live objects jmap -dump:<dump-options> <pid> to connect to running process and dump java heap jmap -? -h --help to print this help message
dump-options: live dump only live objects; if not specified, all objects in the heap are dumped. format=b binary format file=<file> dump heap to <file>
Options: -l long listing. Prints additional information about locks -e extended listing. Prints additional information about threads -? -h --help -help toprint this help message
daiwei@daiweideMacBook-Pro ~ % jstack -l 34979 2021-05-22 21:49:23 Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.231-b11 mixed mode):
command must bea valid jcmd commandfor the selected jvm. Use the command"help"to see which commands are available. If the pid is0, commands will be sent toall Java processes. The main class argument will be used tomatch (either partially or fully) the class used to start Java. If nooptions are given, lists Java processes (same as -l).
PerfCounter.printdisplay the counters exposed by this process -freadandexecute commands from the file -llist JVM processes on the local machine -? -h --helpprint this help message
daiwei@daiweideMacBook-Pro ~ % jcmd 34979 34979: The following commands are available: JFR.stop JFR.start JFR.dump JFR.check VM.native_memory VM.check_commercial_features VM.unlock_commercial_features ManagementAgent.stop ManagementAgent.start_local ManagementAgent.start VM.classloader_stats GC.rotate_log Thread.print GC.class_stats GC.class_histogram GC.heap_dump GC.finalizer_info GC.heap_info GC.run_finalization GC.run VM.uptime VM.dynlibs VM.flags VM.system_properties VM.command_line VM.version help
For more information about a specific command use 'help <command>'.
# help 命令 daiwei@daiweideMacBook-Pro ~ % jcmd 34979help GC.heap_info 34979: GC.heap_info Provide generic Java heap information.
# cmd 命令使用 这里就是前面提到的,jmap 中移除的命令,输出堆内存信息。 daiwei@daiweideMacBook-Pro ~ % jcmd 34979 GC.heap_info 34979: PSYoungGen total 76288K, used 47314K [0x000000076ab00000, 0x0000000770000000, 0x00000007c0000000) eden space 65536K, 55% used [0x000000076ab00000,0x000000076cebc930,0x000000076eb00000) from space 10752K, 99% used [0x000000076eb00000,0x000000076f578010,0x000000076f580000) to space 10752K, 0% used [0x000000076f580000,0x000000076f580000,0x0000000770000000) ParOldGen total 175104K, used 4582K [0x00000006c0000000, 0x00000006cab00000, 0x000000076ab00000) object space 175104K, 2% used [0x00000006c0000000,0x00000006c0479a48,0x00000006cab00000) Metaspace used 7205K, capacity 7438K, committed 7552K, reserved 1056768K class space used 759K, capacity 838K, committed 896K, reserved 1048576K