- 1. JDK 常用命令行工具使用指南
- 1.1. jstat
- 1.2. jps
- 1.3. jcmd
- 1.3.1. command 命令
- 1.3.1.1. VM.unlock_commercial_features
- 1.3.1.2. JFR.configure
- 1.3.1.3. JFR.dump
- 1.3.1.4. JFR.check
- 1.3.1.5. JFR.start
- 1.3.1.6. JFR.stop
- 1.3.1.7. Thread.print
- 1.3.1.8. VM.native_memory
- 1.3.1.9. VM.classloader_stats
- 1.3.1.10. VM.uptime
- 1.3.1.11. VM.dynlibs
- 1.3.1.12. VM.flags
- 1.3.1.13. VM.system_properties
- 1.3.1.14. VM.command_line
- 1.3.1.15. VM.version
- 1.3.1.16. GC.rotate_log
- 1.3.1.17. GC.class_stats
- 1.3.1.18. GC.class_histogram
- 1.3.1.19. GC.heap_dump
- 1.3.1.20. GC.finalizer_info
- 1.3.1.21. GC.heap_info
- 1.3.1.22. GC.run_finalization
- 1.3.1.23. GC.run
- 1.3.1. command 命令
- 1.4. jinfo
- 1.5. jstack
- 1.6. jmap
- 1.7. jhat
1. JDK 常用命令行工具使用指南
1.1. jstat
jstat 是一个命令行工具,它随 Java Development Kit (JDK) 一起提供,用于监控和统计 Java 虚拟机 (JVM) 的性能信息。jstat 可以报告各种运行时信息,包括堆内存使用情况、垃圾回收活动、类加载信息等。这个工具对于分析和调优 Java 应用程序的性能非常有用。
命令格式:
jstat -help|-options
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
参数选项:
-help
:显示帮助信息。-options
:显示 outputOptions 参数的列表。-<option>
:输出选项,指定显示某一种 Java 虚拟机信息。-t
:把时间戳列显示为输出的第一列。这个时间戳是从 Java 虚拟机的开始运行到现在的秒数。-h<lines>
:每显示 n 行显示一次表头,其中 n 为正整数。默认值为 0,即仅在第一行数据显示一次表头。vmid
:虚拟机唯一 ID(LVMID,Local Virtual Machine Identifier),如果查看本机就是 Java 进程的进程 ID。interval
:显示信息的时间间隔,单位默认毫秒。也可以指定秒为单位,比如:1s。如果指定了该参数,jstat 命令将每个这段时间显示一次统计信息。count
:显示数据的次数,默认值是无穷大,这将导致 jstat 命令一直显示统计信息,直到目标 JVM 终止或 jstat 命令终止。
1.1.1. 输出选项:
-class
:显示类加载、卸载数量、总空间和装载耗时的统计信息。-compiler
:显示即时编译的方法、耗时等信息。-gc
:显示堆各个区域内存使用和垃圾回收的统计信息。-gccapacity
:显示堆各个区域的容量及其对应的空间的统计信息。-gcutil
:显示有关垃圾收集统计信息的摘要。-gccause
:显示关于垃圾收集统计信息的摘要 (与-gcutil 相同),以及最近和当前垃圾回收的原因。-gcnew
:显示新生代的垃圾回收统计信息。-gcnewcapacity
:显示新生代的大小及其对应的空间的统计信息。-gcold
: 显示老年代和元空间的垃圾回收统计信息。-gcoldcapacity
:显示老年代的大小统计信息。-gcmetacapacity
:显示元空间的大小的统计信息。-printcompilation
:显示即时编译方法的统计信息。
1.1.1.1. -class
显示类加载、卸载数量、总空间和装载耗时的统计信息。
jstat -class 29710
Loaded Bytes Unloaded Bytes Time
23968 45189.2 0 0.0 5.58
表头定义:
Loaded
:加载的类的数量。Bytes
:加载的类所占用的字节数。Unloaded
:卸载的类的数量。Bytes
:卸载的类所占用的字节数。Time
:执行类加载和卸载操作所花费的时间。
1.1.1.2. -compiler
显示即时编译的方法、耗时等信息。
jstat -compiler 29710
Compiled Failed Invalid Time FailedType FailedMethod
16546 7 0 4.26 1 com/zaxxer/hikari/util/ConcurrentBag borrow
表头定义:
Compiled
:执行的编译任务的数量。Failed
:执行编译任务失败的数量。Invalid
:执行编译任务失效的数量。Time
:执行编译任务所花费的时间。FailedType
:上次编译失败的编译类型。FailedMethod
:上次编译失败的类名和方法。
1.1.1.3. -gc
显示堆各个区域内存使用和垃圾回收的统计信息。
jstat -gc 29710
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
0.0 63488.0 0.0 63488.0 1918976.0 235520.0 1163264.0 69120.0 137856.0 128097.7 18048.0 16346.8 10 0.322 0 0.000 0.322
表头定义:
S0C
:年轻代中第一个 Survivor 区的容量,单位为 KB。S1C
:年轻代中第二个 Survivor 区的容量,单位为 KB。S0U
:年轻代中第一个 Survivor 区已使用大小,单位为 KB。S1U
:年轻代中第二个 Survivor 区已使用大小,单位为 KB。EC
:年轻代中 Eden 区的容量,单位为 KB。EU
:年轻代中 Eden 区已使用大小,单位为 KB。OC
:老年代的容量,单位为 KB。OU
:老年代已使用大小,单位为 KB。MC
:元空间的容量,单位为 KB。MU
:元空间已使用大小,单位为 KB。CCSC
:压缩类的容量,单位为 KB。CCSU
:压缩类已使用大小,单位为 KB。YGC
:Young GC 的次数。YGCT
:Young GC 所用的时间。FGC
:Full GC 的次数。FGCT
:Full GC 的所用的时间。GCT
:GC 的所用的总时间。
1.1.1.4. -gccapacity
显示堆各个区域的容量及其对应的空间的统计信息。
jstat -gccapacity 29710
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
0.0 3145728.0 1982464.0 0.0 63488.0 1918976.0 0.0 3145728.0 1163264.0 1163264.0 0.0 1169408.0 137856.0 0.0 1048576.0 18048.0 10 0
表头定义:
NGCMN
:年轻代最小的容量,单位为 KB。NGCMX
:年轻代最大的容量,单位为 KB。NGC
:当前年轻代的容量,单位为 KB。S0C
:年轻代中第一个 Survivor 区的容量,单位为 KB。S1C
:年轻代中第二个 Survivor 区的容量,单位为 KB。EC
:年轻代中 Eden 区的容量,单位为 KB。OGCMN
:老年代最小的容量,单位为 KB。OGCMX
:老年代最大的容量,单位为 KB。OGC
:当前老年代的容量,单位为 KB。OC
:当前老年代的容量,单位为 KB。MCMN
:元空间最小的容量,单位为 KB。MCMX
:元空间最大的容量,单位为 KB。MC
:当前元空间的容量,单位为 KB。CCSMN
:压缩类最小的容量,单位为 KB。CCSMX
:压缩类最大的容量,单位为 KB。CCSC
:当前压缩类的容量,单位为 KB。YGC
:Young GC 的次数。FGC
:Full GC 的次数。
1.1.1.5. -gcutil
显示有关垃圾收集统计信息的摘要。
jstat -gcutil 29710
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 100.00 21.08 5.94 92.92 90.57 10 0.322 0 0.000 0.322
表头定义:
S0
:年轻代中第一个 Survivor 区使用大小占当前容量的百分比。S1
:年轻代中第二个 Survivor 区使用大小占当前容量的百分比。E
:Eden 区使用大小占当前容量的百分比。O
:老年代使用大小占当前容量的百分比。M
:元空间使用大小占当前容量的百分比。CCS
:压缩类使用大小占当前容量的百分比。YGC
:Young GC 的次数。YGCT
:Young GC 所用的时间。FGC
:Full GC 的次数。FGCT
:Full GC 的所用的时间。GCT
:GC 的所用的总时间。
1.1.1.6. -gccause
显示关于垃圾收集统计信息的摘要 (与-gcutil 相同),以及最近和当前垃圾回收的原因。
jstat -gccause 29710
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC
0.00 100.00 23.37 5.94 92.92 90.57 10 0.322 0 0.000 0.322 G1 Evacuation Pause No GC
表头定义:
S0
:年轻代中第一个 Survivor 区使用大小占当前容量的百分比。S1
:年轻代中第二个 Survivor 区使用大小占当前容量的百分比。E
:Eden 区使用大小占当前容量的百分比。O
:老年代使用大小占当前容量的百分比。M
:元空间使用大小占当前容量的百分比。CCS
:压缩类使用大小占当前容量的百分比。YGC
:Young GC 的次数。YGCT
:Young GC 所用的时间。FGC
:Full GC 的次数。FGCT
:Full GC 的所用的时间。GCT
:GC 的所用的总时间。LGCC
:上次垃圾回收的原因。GCC
:当前垃圾回收的原因。
1.1.1.7. -gcnew
显示新生代的垃圾回收统计信息。
jstat -gcnew 29710
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
0.0 63488.0 0.0 63488.0 15 15 118272.0 1918976.0 493568.0 10 0.322
表头定义:
S0C
:年轻代中第一个 Survivor 区的容量,单位为 KB。S1C
:年轻代中第二个 Survivor 区的容量,单位为 KB。S0U
:年轻代中第一个 Survivor 区已使用大小,单位为 KB。S1U
:年轻代中第二个 Survivor 区已使用大小,单位为 KB。TT
:对象在年轻代存活的次数。MTT
:对象在年轻代存活的最大次数DSS
:期望的 Survivor 区大小,单位为 KB。EC
:年轻代中 Eden 区的容量,单位为 KB。EU
:年轻代中 Eden 区已使用大小,单位为 KB。YGC
:Young GC 的次数。YGCT
:Young GC 所用的时间。
1.1.1.8. -gcnewcapacity
显示新生代的大小及其对应的空间的统计信息。
jstat -gcnewcapacity 29710
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
0.0 3145728.0 1982464.0 0.0 0.0 3145728.0 63488.0 3145728.0 1918976.0 10 0
表头定义:
NGCMN
:年轻代最小的容量,单位为 KB。NGCMX
:年轻代最大的容量,单位为 KB。NGC
:当前年轻代的容量,单位为 KB。S0CMX
:年轻代中第一个 Survivor 区最大的容量,单位为 KB。S0C
:年轻代中第一个 Survivor 区的容量,单位为 KB。S1CMX
:年轻代中第二个 Survivor 区最大的容量,单位为 KB。S1C
:年轻代中第二个 Survivor 区的容量,单位为 KB。ECMX
:年轻代中 Eden 区最大的容量,单位为 KB。EC
:年轻代中 Eden 区的容量,单位为 KB。YGC
:Young GC 的次数。FGC
:Full GC 的次数。
1.1.1.9. -gcold
显示老年代和元空间的垃圾回收统计信息。
jstat -gcold 29710
MC MU CCSC CCSU OC OU YGC FGC FGCT GCT
137856.0 128097.7 18048.0 16346.8 1163264.0 69120.0 10 0 0.000 0.322
表头定义:
MC
:元空间的容量,单位为 KB。MU
:元空间已使用大小,单位为 KB。CCSC
:压缩类的容量,单位为 KB。CCSU
:压缩类已使用大小,单位为 KB。OC
:老年代的容量,单位为 KB。OU
:老年代已使用大小,单位为 KB。YGC
:Young GC 的次数。FGC
:Full GC 的次数。FGCT
:Full GC 的所用的时间。GCT
:GC 的所用的总时间。
1.1.1.10. -gcoldcapacity
显示老年代的大小统计信息。
jstat -gcoldcapacity 29710
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
0.0 3145728.0 1163264.0 1163264.0 12 0 0.000 0.465
表头定义:
OGCMN
:老年代最小的容量,单位为 KB。OGCMX
:老年代最大的容量,单位为 KB。OGC
:当前老年代的容量,单位为 KB。OC
:当前老年代的容量,单位为 KB。YGC
:Young GC 的次数。FGC
:Full GC 的次数。FGCT
:Full GC 的所用的时间。GCT
:GC 的所用的总时间。
1.1.1.11. -gcmetacapacity
显示元空间的大小的统计信息。
jstat -gcmetacapacity 29710
MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT
0.0 1169408.0 138368.0 0.0 1048576.0 18048.0 15 0 0.000 0.581
表头定义:
MCMN
:元空间最小的容量,单位为 KB。MCMX
:元空间最大的容量,单位为 KB。MC
:当前元空间的容量,单位为 KB。CCSMN
:压缩类最小的容量,单位为 KB。CCSMX
:压缩类最大的容量,单位为 KB。YGC
:Young GC 的次数。FGC
:Full GC 的次数。FGCT
:Full GC 的所用的时间。GCT
:GC 的所用的总时间。
1.1.1.12. -printcompilation
显示即时编译方法的统计信息。
jstat -printcompilation 29710
Compiled Size Type Method
16895 805 1 org/quartz/simpl/SimpleThreadPool$WorkerThread run
表头定义:
Compiled
:最近编译方法执行的编译任务的数量。Size
:最近编译方法的字节码的字节数。Type
:最近编译方法的编译类型。Method
:最近编译方法的类名和方法名。
1.2. jps
jps 是用于查看有权访问的 hotspot 虚拟机的进程。当未指定 hostid 时,默认查看本机 jvm 进程,否者查看指定的 hostid 机器上的 jvm 进程,此时 hostid 所指机器必须开启 jstatd 服务。jps 可以列出 jvm 进程 lvmid,主类类名,main 函数参数,jvm 参数,jar 名称等信息。
命令格式:
jps [-q] [-mlvV] [<hostid>]
参数选项:
无参数
:默认列出本地主机上所有 Java 进程的本地虚拟机标识符(LVMID)和启动类的名称-q
:仅输出进程的 LVMID,不包括类名、JAR 文件名或传递给 main 方法的参数-m
:输出传递给 main 方法的参数。-l
:输出应用程序主类的完整包名或者是 JAR 文件的完整名称-v
:输出传递给 Java 虚拟机的参数,例如堆大小等-V
:输出通过 .hotspotrc 文件或 -XX:Flags=指定的 JVM 参数 hostid
:指定特定主机,可以是 IP 地址和域名,也可以指定具体协议和端口。
1.3. jcmd
jcmd 是 Java 开发工具包(JDK)中的一个命令行实用程序,用于向运行中的 Java 虚拟机(JVM)发送诊断命令。自 JDK 7 开始引入,jcmd 逐渐取代了之前的一些分散的诊断工具,如 jps、jstack、jmap 和 jinfo 等,并随着 JDK 版本的更新而不断增加新的诊断功能。
命令格式:
jcmd <pid | main class> <command ...|PerfCounter.print|-f file>
jcmd -l
jcmd -h
参数选项:
pid
:指定要发送命令的 Java 进程的进程标识符。0 表示所有进程。main class
:指定要发送命令的主类名称。command
:指定要对指定的 Java 进程执行的诊断命令。PerfCounter.print
:打印 JVM 性能相关的计数器信息。-f file
:从文件中读取命令并执行。-l
:列出本机上所有的 Java 进程。-h
:显示 jcmd 的帮助信息
1.3.1. command 命令
1.3.1.1. VM.unlock_commercial_features
用于解锁 Java 虚拟机(JVM)中的商业特性的命令。这项功能允许用户启用那些在默认情况下被标记为商业特性的 JVM 功能,例如 Java Flight Recorder (JFR)。JFR 是一个强大的、内置的性能监控和分析工具,它允许开发者和性能工程师收集有关 Java 应用程序运行时行为的详细信息。
jcmd 28126 VM.unlock_commercial_features
28126:
Command executed successfully
1.3.1.2. JFR.configure
Configure JFR
Syntax :
JFR.configure [options]
Options: (options must be specified using the
repositorypath
: [optional] Path to repository,.e.g "My Repository" (STRING, no default value)dumppath
: [optional] Path to dump,.e.g "My Dump path" (STRING, no default value)stackdepth
: [optional] Stack Depth (JULONG, 64)globalbuffercount
: [optional] Number of global buffers, (JULONG, 20)globalbuffersize
: [optional] Size of a global buffers, (MEMORY SIZE, 512k)thread_buffer_size
: [optional] Size of a thread buffer (MEMORY SIZE, 8k)memorysize
: [optional] Overall memory size, (MEMORY SIZE, 10m)maxchunksize
: [optional] Size of an individual disk chunk (MEMORY SIZE, 12m)samplethreads
: [optional] Activate Thread sampling (BOOLEAN, true)
1.3.1.3. JFR.dump
Copies contents of a JFR recording to file. Either the name or the recording id must be specified.
Syntax :
JFR.dump [options]
Options: (options must be specified using the
name
: [optional] Recording name, e.g. "My Recording" (STRING, no default value)filename
: [optional] Copy recording data to file, e.g. "/home/user/My Recording.jfr" (STRING, no default value)maxage
: [optional] Maximum duration to dump, 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 dump, in (M)B or (G)B, e.g. 500M, or 0 for no limit (MEMORY SIZE, 0)begin
: [optional] Point in time to dump data from, e.g. 09:00, 21:35:00, 2018-06-03T18:12:56.827Z, 2018-06-03T20:13:46.832, -10m, -3h, or -1d (STRING, no default value)end
: [optional] Point in time to dump data to, e.g. 09:00, 21:35:00, 2018-06-03T18:12:56.827Z, 2018-06-03T20:13:46.832, -10m, -3h, or -1d (STRING, no default value)path-to-gc-roots
: [optional] Collect path to GC roots (BOOLEAN, false)
1.3.1.4. JFR.check
Checks running JFR recording(s)
Syntax :
JFR.check [options]
Options: (options must be specified using the
name
: [optional] Recording name, e.g. "My Recording" or omit to see all recordings (STRING, no default value)verbose
: [optional] Print event settings for the recording(s) (BOOLEAN, false)
1.3.1.5. JFR.start
Starts a new JFR recording
Syntax :
JFR.start [options]
Options: (options must be specified using the
name
: [optional] Name that can be used to identify recording, e.g. "My Recording" (STRING, 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)disk
: [optional] Recording should be persisted to disk (BOOLEAN, no default value)filename
: [optional] Resulting recording filename, e.g. "/home/user/My Recording.jfr" (STRING, no default value)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)dumponexit
: [optional] Dump running recording when JVM shuts down (BOOLEAN, no default value)path-to-gc-roots
: [optional] Collect path to GC roots (BOOLEAN, false)
1.3.1.6. JFR.stop
Stops a JFR recording
Syntax :
JFR.stop [options]
Options: (options must be specified using the
name
: Recording text,.e.g "My Recording" (STRING, no default value)filename
: [optional] Copy recording data to file, e.g. "/home/user/My Recording.jfr" (STRING, no default value)
1.3.1.7. Thread.print
Print all threads with stacktraces.
Syntax :
Thread.print [options]
Options: (options must be specified using the
-l
: [optional] print java.util.concurrent locks (BOOLEAN, false)
1.3.1.8. VM.native_memory
Print native memory usage
用于获取有关 JVM 本地(即非堆)内存使用情况的详细信息。分析堆外内存泄露。
启动程序时必须开启 Native Memory Tracking (NMT) 特性:-XX:NativeMemoryTracking=summary
或 -XX:NativeMemoryTracking=detail
Syntax :
VM.native_memory [options]
Options: (options must be specified using the
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)
1.3.1.9. VM.classloader_stats
Print statistics about all ClassLoaders.
Syntax:
VM.classloader_stats
1.3.1.10. VM.uptime
Print VM uptime.
Syntax:
VM.uptime [options]
Options: (options must be specified using the
-date
: [optional] Add a prefix with current date (BOOLEAN, false)
1.3.1.11. VM.dynlibs
列出 JVM 进程当前加载的所有动态链接库(Dynamic Libraries)的信息。
Syntax:
VM.dynlibs
1.3.1.12. VM.flags
输出当前运行的 JVM 实例的所有启动参数。加上-all=true
参数输出所有支持的 JVM 参数
Syntax:
VM.flags [options]
Options: (options must be specified using the
-all
: [optional] Print all flags supported by the VM (BOOLEAN, false)
1.3.1.13. VM.system_properties
Print system properties.
Syntax:
VM.system_properties
1.3.1.14. VM.command_line
Print the command line used to start this VM instance.
Syntax:
VM.command_line
1.3.1.15. VM.version
Print JVM version information.
Syntax:
VM.version
1.3.1.16. GC.rotate_log
Force the GC log file to be rotated.
将当前的垃圾收集(Garbage Collection,GC)日志文件进行轮换。轮换后的日志文件可以用于分析,而不会干扰正在运行的 JVM。
执行这个命令后,当前的 GC 日志文件会被关闭,并且创建一个新的日志文件,新的日志文件会继承当前日志文件的名称,并且追加一个时间戳,以区分不同的日志文件。
Syntax:
GC.rotate_log
1.3.1.17. GC.class_stats
Provide statistics about Java class meta data. Requires -XX:+UnlockDiagnosticVMOptions.
Syntax :
GC.class_stats [options] [<columns>]
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
-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)
1.3.1.18. GC.class_histogram
Provide statistics about the Java heap usage.
Syntax:
GC.class_histogram [options]
Options: (options must be specified using the
-all
: [optional] Inspect all objects, including unreachable objects (BOOLEAN, false)
1.3.1.19. GC.heap_dump
Generate a HPROF format dump of the Java heap.
Syntax:
GC.heap_dump [options] <filename>
Arguments:
filename
: Name of the dump file (STRING, no default value)
Options: (options must be specified using the
-all
: [optional] Dump all objects, including unreachable objects (BOOLEAN, false)
1.3.1.20. GC.finalizer_info
Provide information about Java finalization queue.
命令用于获取有关对象终结器(finalizer)的信息。终结器是 Java 中的一个特性,允许对象在垃圾收集器回收之前执行一些清理工作。这个命令会列出所有等待终结的对象数量,以及一些与终结队列相关的状态信息。
Syntax:
GC.finalizer_info
1.3.1.21. GC.heap_info
Provide generic Java heap information.
Syntax:
GC.heap_info
1.3.1.22. GC.run_finalization
Call java.lang.System.runFinalization().
Syntax:
GC.run_finalization
1.3.1.23. GC.run
Call java.lang.System.gc().
Syntax:
GC.run
1.4. jinfo
jinfo(JVM Information)是 Java 虚拟机(JVM)提供的一个命令行工具,它用于显示当前 Java 虚拟机的配置信息,包括系统属性和 JVM 命令行参数。
命令格式:
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)
参数选项:
-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 print this help message
1.5. jstack
jstack 是一个用于生成 Java 虚拟机(JVM)当前时刻的线程快照的命令行工具。它是 JDK 自带的一系列监控和管理工具中的一个,主要用于线程分析和故障排除。
命令格式:
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)
参数选项:
-F
:to force a thread dump. Use when jstackdoes 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
1.6. jmap
jmap(JVM Memory Map)是一个用于生成 Java 虚拟机(JVM)堆内存快照的命令行工具,它也是 JDK 自带的一系列监控和管理工具之一。这个工具对于分析内存使用情况和诊断内存泄漏等问题非常有用。
命令格式:
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)
参数选项:
<none>
:to print same info as Solaris pmap-heap
: to print java heap summary-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
dump-options:live
: dump only live objects; if not specified, all objects in the heap are dumped.format=b
: binary formatfile=<file>
: dump heap to. Example: jmap -dump:live,format=b,file=heap.bin
-F
: force. Use with -dump:or -histo to force a heap dump or histogram when does not respond. The "live" suboption is not supported in this mode. -h | -help
: to print this help message-J<flag>
: to passdirectly to the runtime system
1.7. jhat
jhat(JVM Heap Analysis Tool)是与 JDK 一起提供的命令行工具,用于分析 Java 虚拟机(JVM)的堆转储文件(heap dump)。jhat 可以生成一个简单的 web 服务器,让开发者可以通过浏览器查看堆转储的分析结果,包括对象的统计信息、类实例的分布、潜在的内存泄漏等。
命令格式:
jhat [-stack <bool>] [-refs <bool>] [-port <port>] [-baseline <file>] [-debug <int>] [-version] [-h|-help] <file>
参数选项:
-J<flag>
: Passdirectly to the runtime system. For example, -J-mx512m to use a maximum heap size of 512MB -stack false
: Turn off tracking object allocation call stack.-refs false
: Turn off tracking of references to objects-port <port>
: Set the port for the HTTP server. Defaults to 7000-exclude <file>
: Specify a file that lists data members that should be excluded from the reachableFrom query.-baseline <file>
: Specify a baseline object dump. Objects in both heap dumps with the same ID and same class will be marked as not being "new".-debug <int>
: Set debug level.0
: No debug output1
: Debug hprof file parsing2
: Debug hprof file parsing, no server
-version
: Report version number-h|-help
: Print this help and exit<file>
: The file to read
For a dump file that contains multiple heap dumps, you may specify which dump in the file by appending "#
All boolean options default to "true"