一、JPS 进程查看工具
用于列出当前系统中所有正在运行的 Java 进程。它的主要作用是查看 Java 进程的 PID(进程标识符)和主类名。可以帮助开发人员快速了解系统中正在运行的 Java 进程,对于监控和调试 Java 应用程序非常有用。
用法:
bash
jps [options] [hostid]
java
options参数选项说明如下:
-q 不输出类名、Jar名和传入main方法的参数
-m 输出传入main方法的参数
-l 输出main类或Jar的全限名
-v 输出传入JVM的参数
示例:
查看当前主机Java的进程有哪些:
java
jps

将 main类或Jar的全限名 和 jvm 的参数输出

二、jinfo 参数查看工具
用于查看和调整 Java 进程的运行时参数。它可以显示 Java 进程的启动参数、系统属性和 VM 参数,并且可以动态修改某些参数,而无需重新启动 Java 进程。可以帮助开发人员调试和优化 Java 应用程序的运行时参数。
用法:
java
jinfo [option] pid
java
options参数选项说明如下:
-flag <name>: 显示指定名称的 JVM 参数的值。
-flags: 显示所有的 JVM 参数及其值。
-sysprops: 显示 Java 系统属性的值。
-sysprops <name>: 显示指定名称的 Java 系统属性的值。
-sysprops <name>=<value>: 设置指定名称的 Java 系统属性的值。
-sysprops <file>: 从指定的文件中加载 Java 系统属性。
-version: 显示 Java 应用程序的版本信息。
-help: 显示帮助信息,列出所有可用选项及其用法。
示例:
查看 PID 为 21656 的 Java 进程的 JVM 启动参数。
java
jinfo -flags 21656

仅查看 PID 为 21656 的 MaxHeapSize 。
java
jinfo -flag MaxHeapSize 21656

查看 PID 为 21656的 Java 进程的系统属性。
java
jinfo -sysprops 21656

三、jmap 内存查看工具
用于生成 Java 进程的内存映像文件,以及查看 Java 进程的堆内存使用情况、内存分配情况等信息。可以帮助开发人员分析和诊断 Java 进程的内存使用情况,特别是在内存泄漏和性能调优方面。
用法:
java
jmap [option] pid
java
options参数选项说明如下:
-heap: 显示 Java 堆内存使用情况。
-histo: 显示 Java 堆内存中对象的统计信息。
-dump: 生成 Java 堆内存转储文件。
-F: 强制生成 Java 堆内存转储文件,即使 Java 进程不响应。
-finalizerinfo: 显示在队列中等待终结的对象信息。
-permstat: 显示永久代内存使用情况。
-clstats: 显示类加载器信息。
-heapsummary: 显示 Java 堆内存摘要信息。
-J<flag>: 传递参数给 JVM。
示例:
查看 PID 为 21656的 Java 进程的堆内存使用情况。
java
jmap -heap 21656

查看 PID 为 21656 的 Java 进程的对象的内存分布情况。
java
jmap -histo 21656

将 PID 为 21656 的 Java 进程的内存映像文件,并保存为 heapdump.bin 文件。
java
jmap -dump:file=heapdump.bin 21656

生成的文件可使用下面 jhat 读取。
四、jhat 内存映像文件分析工具
用于分析 Java 进程的堆内存转储文件(heap dump file),并启动一个简单的 Web 服务器,以便用户通过浏览器查看和分析堆内存信息。
用法:
java
jhat heap_dump_file
其中,heap_dump_file 是要分析的堆内存转储文件的路径。
示例:
使用上一步生成的 heapdump.bin 文件
java
jhat .\heapdump.bin

浏览器访问 http://localhost:7000,即可查看分析结果。


五、jstat 信息监视工具
用于监视 Java 虚拟机的各种运行时统计信息,例如堆内存使用情况、垃圾回收情况、类加载情况等。可以帮助开发人员实时监视 Java 进程的运行时统计信息,用于性能分析和调优。
用法:
java
jstat [option] pid [interval [count]]
java
options参数选项说明如下:
-class: 显示类加载、卸载信息。
-compiler: 显示即时编译器统计信息。
-gc: 显示垃圾回收统计信息。
-gccapacity: 显示垃圾回收堆容量信息。
-gccause: 显示垃圾回收统计信息,并包括垃圾回收原因。
-gcnew: 显示新生代垃圾回收统计信息。
-gcnewcapacity: 显示新生代堆容量信息。
-gcold: 显示老年代垃圾回收统计信息。
-gcoldcapacity: 显示老年代堆容量信息。
-gcutil: 显示垃圾回收统计信息,包括垃圾回收占用时间、堆空间使用率等。
其中,option 是用于指定要监视的统计信息的选项,pid 是要监视的 Java 进程的 PID。interval 是指定更新统计信息的时间间隔(以毫秒为单位),默认为 1 秒。count 是指定更新统计信息的次数,默认为无限次。
示例:
以默认的时间间隔和次数,查看 PID 为 21656 的 Java 进程的垃圾回收信息。
java
jstat -gc 21656

以 1 秒的时间间隔,显示 PID 为 21656 的 Java 进程的垃圾回收信息,共更新 10 次。
java
jstat -gcutil 21656 1000 10

六、jstack 线程分析工具
用于生成 Java 进程的线程转储信息,以便分析 Java 进程的线程状态、堆栈信息等,通常用于诊断线程死锁、线程等待等问题。
用法:
java
jstack pid
示例:
查看 PID 为 21656 的 Java 进程的线程转储信息,并将结果输出到命令行终端
java
jstack 21656

jstack 将打印出线程的状态、线程 ID、线程堆栈信息等内容,以及任何锁定对象的相关信息。这些信息可以帮助开发人员分析 Java 进程中的线程情况,识别潜在的线程问题,例如死锁、线程阻塞等。
jstack 还支持一些选项,例如 -l 可以输出额外的锁定信息,-F 可以强制生成线程转储信息,即使 Java 进程不响应。
七、jcmd 命令执行工具
用于执行各种诊断命令和操作 Java 进程的功能。它可以列出当前系统中所有正在运行的 Java 进程、显示 Java 进程的基本信息、执行各种诊断命令以及执行其他操作。提供了丰富的诊断功能,用于监控、诊断和管理 Java 进程。
用法:
java
jcmd [pid | main-class | command] [options]
其中,pid 是要操作的 Java 进程的 PID,main-class 是要操作的 Java 进程的主类名,command 是要执行的诊断命令。options 是命令的选项和参数。
示例:
查看当前系统中所有正在运行的 Java 进程的 PID 和主类名。
java
jcmd

查看 PID 为 21656 的 Java 进程的 JVM 启动参数。
java
jcmd 21656 VM.flags

除了上述示例中列出的命令外,jcmd 还支持其他一些命令,例如 GC.heap_dump 可以生成堆内存转储文件,Thread.print 可以打印线程堆栈信息等。你可以通过输入 jcmd help 查看所有可用的命令和选项。