麦克斯仇
Think different
160
文章
47126
阅读
首页
INDEX
文章
ARTICLE
关于
ABOUT
JDK命令行工具 jps/jinfo/jstat/jmap/jstack
创建日期:
2020/03/10
修改日期:
2022/06/22
Java
> java version "1.8.0_201" # jps 列出运行中的Java虚拟机 官方参考:[https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jps.html](https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jps.html) ```bash usage: jps [-help] jps [-q] [-mlvV] [<hostid>] Definitions: <hostid>: <hostname>[:<port>] ``` ```bash # 查看当前主机运行的java进城 jps # 显示类名全称 jps -l # 显示传递给main方法的参数 jps -m # 显示传递给JVM的参数 jsp -v ``` # jinfo 打印配置信息 官方参考:[https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jinfo.html](https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jinfo.html) ```bash 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 # 打印指定VM标志的值 -flag [+|-]<name> to enable or disable the named VM flag # 启用或禁用指定的VM标志 -flag <name>=<value> to set the named VM flag to the given value # 将指定的VM标志设置为给定的值 -flags to print VM flags # 打印VM标志 -sysprops to print Java system properties # 打印Java系统属性 <no option> to print both of the above # 把以上两种都打印出来 -h | -help to print this help message # 打印此帮助信息 ``` ```bash # 查看指定JVM进程的全部配置信息 jinfo <pid> # 查看指定参数的值 jinfo -flag MaxHeapSize <pid> # 查看手动修改的JVM参数 jinfo -flags <pid> # 查看Java系统属性 jinfo -sysprops <pid> ``` # jstat 查看JVM统计信息 官方参考:[https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html](https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html) ```bash Usage: jstat -help|-options jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]] Definitions: <option> An option reported by the -options option # 由-options选项报告的一个选项 <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. # 标题行之间的样本数量。(每n行显示一次标题) <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". # 采样间隔。可使用下列表格: # <n>["ms"|"s"] # 其中n是一个整数,后缀指定的单位是 # 毫秒("ms")或秒("s")。默认的单位是"ms"。 <count> Number of samples to take before terminating. # 需要采集的样本数量 -J<flag> Pass <flag> directly to the runtime system. ``` option可选项如下: class:显示有关类加载器行为的统计信息。 compiler:显示有关Java HotSpot VM即时编译器行为的统计信息。 gc:显示有关垃圾收集堆行为的统计信息。 gccapacity:显示有关世代容量及其相应空间的统计信息。 gccause:显示有关垃圾收集统计信息的摘要(与相同-gcutil),以及上一次和当前(如果适用)垃圾收集事件的原因。 gcnew:显示新一代行为的统计信息。 gcnewcapacity:显示有关新一代大小及其相应空间的统计信息。 gcold:显示有关旧时代行为的统计信息和元空间统计信息。 gcoldcapacity:显示有关上一代的大小的统计信息。 gcmetacapacity:显示有关元空间大小的统计信息。 gcutil:显示有关垃圾收集统计信息的摘要。 printcompilation:显示Java HotSpot VM编译方法统计信息。 示例: ```bash # 显示类加载信息 jstat -class <pid> # 显示类加载信息,并将时间放在第一列 jstat -class -t <pid> # 每秒(1000ms)打印一次信息,打印10次信息 jstat -class <pid> 1000 10 jstat -class <pid> 1s 10 # 每秒(1000ms)打印一次信息,打印10次信息,每5次打印一下标题 jstat -class -h 5 <pid> 1000 10 ``` ### -class 显示有关类加载器行为的统计信息。 Loaded:加载的类数 Bytes:加载的kB数 Unloaded:卸载的类数 Bytes:卸载的KB数 Time:执行类加载和卸载操作所花费的时间 ### -compiler Java HotSpot VM即时编译器统计信息 Compiled:执行的编译任务数 Failed:编译任务数失败 Invalid:无效的编译任务数 Time:执行编译任务所花费的时间 FailedType:上次失败的编译的编译类型 FailedMethod:上次失败的编译的类名和方法 ### -printcompilation Java HotSpot VM编译器方法统计信息 Compiled:由最近编译的方法执行的编译任务数 Size:最近编译的方法的字节码的字节数 Type:最近编译的方法的编译类型 Method:标识最近编译的方法的类名和方法名。类名使用斜杠(/)代替点(。)作为名称空间分隔符。方法名称是指定类中的方法。这两个字段的格式与HotSpot -XX:+PrintCompilation选项一致 ### -gc 垃圾收集的堆统计信息 S0C:当前S0容量(kB) S1C:当前S1容量(kB) S0U:S0利用率(kB) S1U:S1利用率(kB) EC:当前eden容量(kB) EU:eden利用率(kB) OC:当前Old区容量(kB) OU:Old区利用率(kB) MC:Metaspace容量(kB) MU:Metaspace利用率(kB) CCSC:压缩类空间容量(kB) CCSU:使用的压缩类空间(kB) YGC:年轻代GC事件的数量 YGCT:年轻代GC时间 FGC:完整GC事件的数量 FGCT:完整GC事件的时间 GCT:总GC时间 ### -gccapacity 内存池的生成和空间容量 NGCMN:最小新一代容量(kB) NGCMX:最大新一代容量(kB) NGC:当前的新一代容量(kB) S0C:当前S0容量(kB) S1C:当前S1容量(kB) EC:当前eden容量(kB) OGCMN:最小老一代容量(kB) OGCMX:最大老一代容量(kB) OGC:当前老一代容量(kB) OC:当前Old区容量(kB) MCMN:最小Metaspace容量(kB) MCMX:最大Metaspace容量(kB) MC:Metaspace容量(kB) CCSMN:压缩的类空间最小容量(kB) CCSMX:压缩的类空间最大容量(kB) CCSC:压缩类空间容量(kB) YGC:年轻代GC事件的数量 FGC:完整GC事件的数量 ### -gcnew 新一代统计数据 S0C:当前S0容量(kB) S1C:当前S1容量(kB) S0U:S0利用率(kB) S1U:S1利用率(kB) TT:任期阈值 MTT:最大任期阈值 DSS:DS大小(kB) EC:当前eden容量(kB) EU:eden利用率(kB) YGC:年轻代GC事件的数量 YGCT:年轻代GC时间 ### -gcnewcapacity 新一代空间大小统计信息 NGCMN:最小新一代容量(kB) NGCMX:最大新一代容量(kB) NGC:当前的新一代容量(kB) S0CMX:最大S0容量(kB) S0C:当前S0容量(kB) S1CMX:最大S1容量(kB) S1C:当前S1容量(kB) ECMX:最大eden容量(kB) EC:当前eden容量(kB) YGC:年轻代GC事件的数量 FGC:完整GC事件的数量 ### -gcold 老一代和元空间行为统计 MC:Metaspace容量(kB) MU:Metaspace利用率(kB) CCSC:压缩类空间容量(kB) CCSU:使用的压缩类空间(kB) OC:当前Old区容量(kB) OU:Old区利用率(kB) YGC:年轻代GC事件的数量 FGC:完整GC事件的数量 FGCT:完整GC事件的时间 GCT:总GC时间 ### -gcoldcapacity 老一代大小统计信息 OGCMN:最小老一代容量(kB) OGCMX:最大老一代容量(kB) OGC:当前老一代容量(kB) OC:当前Old区容量(kB) YGC:年轻代GC事件的数量 FGC:完整GC事件的数量 FGCT:完整GC事件的时间 GCT:总GC时间 ### -gcmetacapacity Metaspace大小统计信息 MCMN:最小Metaspace容量(kB) MCMX:最大Metaspace容量(kB) MC:Metaspace容量(kB) CCSMN:压缩的类空间最小容量(kB) CCSMX:压缩的类空间最大容量(kB) YGC:年轻代GC事件的数量 FGC:完整GC事件的数量 FGCT:完整GC事件的时间 GCT:总GC时间 ### -gcutil 垃圾收集统计信息摘要 S0:S0利用率占该空间当前容量的百分比 S1:S1利用率占空间当前容量的百分比 E:eden利用率占空间当前容量的百分比 O:Old区利用率占空间当前容量的百分比 M:Metaspace利用率占空间当前容量的百分比 CCS:压缩的类空间利用率(以百分比表示) YGC:年轻代GC事件的数量 YGCT:年轻代GC时间 FGC:完整GC事件的数量 FGCT:完整GC事件的时间 GCT:总垃圾收集时间 ### -gccause > 此选项显示的垃圾收集统计信息与该-gcutil选项相同,但包括上一个垃圾收集事件和(如果适用)当前垃圾收集事件的原因。除了为列出的列之外-gcutil,此选项还添加了以下列 LGCC:上次垃圾回收的原因 GCC:当前垃圾收集的原因 # 导出内存映像文件 ### 内存溢出自动导出 > 在java启动命令内,添加如下命令 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./ ### jmap手动导出 官方参考:[https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jmap.html](https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jmap.html) ```bash Usage: jmap [option] <pid> (to connect to running process) jmap [option] <executable <core> (to connect to a core file) jmap [option] [server_id@]<remote server IP or hostname> (to connect to remote debug server) where <option> is one of: <none> to print same info as Solaris pmap # 打印与Solaris pmap相同的信息 -heap to print java heap summary # 打印java堆摘要 -histo[:live] to print histogram of java object heap; if the "live" suboption is specified, only count live objects -clstats to print class loader statistics # 打印类加载器统计信息 -finalizerinfo to print information on objects awaiting finalization # 打印等待完成的对象信息 -dump:<dump-options> to dump java heap in hprof binary format # 以hprof二进制格式转储java堆 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> # 将堆转储到<文件> Example: jmap -dump:live,format=b,file=heap.bin <pid> -F force. Use with -dump:<dump-options> <pid> or -histo to force a heap dump or histogram when <pid> does not respond. The "live" suboption is not supported in this mode. -h | -help to print this help message # 打印此帮助信息 -J<flag> to pass <flag> directly to the runtime system ``` ```bash # 打印共享对象映射。对于目标JVM中加载的每个共享对象,将打印共享对象文件的开始地址,映射的大小和完整路径。 jmap <pid> # 转储java堆中存活的对象,导出文件为heap.bin jmap -dump:live,format=b,file=heap.bin <pid> # 打印所用垃圾收集的堆摘要,头配置和逐代堆使用情况。此外,还会打印实际字符串的数量和大小。 jmap -heap <pid> # 打印Java堆的类加载器wise统计信息。对于每个类加载器,将打印它的名称、活动程度、地址、父类加载器以及加载的类的数量和大小。 jmap -clstats <pid> # 打印有关正在等待完成的对象的信息。 jmap -finalizerinfo <pid> ``` # jstack 打印Java进程,核心文件或远程调试服务器的Java线程堆栈跟踪 官方参考:[https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstack.html](https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstack.html) ```bash Usage: jstack [-l] <pid> (to connect to running process) jstack -F [-m] [-l] <pid> (to connect to a hung process) jstack [-m] [-l] <executable> <core> (to connect to a core file) jstack [-m] [-l] [server_id@]<remote server IP or hostname> (to connect to a remote debug server) Options: -F to force a thread dump. Use when jstack <pid> does not respond (process is hung) -m to print both java and native frames (mixed mode) -l long listing. Prints additional information about locks # 长清单。打印关于锁的附加信息 -h or -help to print this help message # 打印此帮助信息 ``` ```bash # 打印Java进程 jstack <pid> # 长清单。打印关于锁的附加信息,例如拥有的可拥有的java.util.concurrent同步器列表。 jstack -l <pid> ``` 线程状态 | 描述 ---|--- NEW | 该线程尚未启动。 RUNNABLE | 线程正在JVM中执行。 BLOCKED | 线程被阻塞,等待监视器锁定。 WAITING | 线程无限期地等待另一个线程执行特定操作。 TIMED_WAITING | 线程正在等待另一个线程执行操作,直到指定的等待时间。 TERMINATED | 线程已退出。
9
全部评论