JVM 常用监控工具介绍和使用

一、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: 显示帮助信息,列出所有可用选项及其用法。

示例

查看 PID21656Java 进程的 JVM 启动参数。

java 复制代码
jinfo -flags 21656

仅查看 PID21656MaxHeapSize

java 复制代码
jinfo -flag MaxHeapSize 21656

查看 PID21656Java 进程的系统属性。

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。

示例

查看 PID21656Java 进程的堆内存使用情况。

java 复制代码
jmap -heap 21656

查看 PID21656Java 进程的对象的内存分布情况。

java 复制代码
jmap -histo 21656

PID21656Java 进程的内存映像文件,并保存为 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 进程的 PIDinterval 是指定更新统计信息的时间间隔(以毫秒为单位),默认为 1 秒。count 是指定更新统计信息的次数,默认为无限次。

示例

以默认的时间间隔和次数,查看 PID21656Java 进程的垃圾回收信息。

java 复制代码
jstat -gc 21656

1 秒的时间间隔,显示 PID21656 的 Java 进程的垃圾回收信息,共更新 10 次。

java 复制代码
jstat -gcutil 21656 1000 10

六、jstack 线程分析工具

用于生成 Java 进程的线程转储信息,以便分析 Java 进程的线程状态、堆栈信息等,通常用于诊断线程死锁、线程等待等问题。

用法

java 复制代码
jstack pid

示例

查看 PID 为 21656Java 进程的线程转储信息,并将结果输出到命令行终端

java 复制代码
jstack 21656

jstack 将打印出线程的状态、线程 ID、线程堆栈信息等内容,以及任何锁定对象的相关信息。这些信息可以帮助开发人员分析 Java 进程中的线程情况,识别潜在的线程问题,例如死锁、线程阻塞等。

jstack 还支持一些选项,例如 -l 可以输出额外的锁定信息,-F 可以强制生成线程转储信息,即使 Java 进程不响应。

七、jcmd 命令执行工具

用于执行各种诊断命令和操作 Java 进程的功能。它可以列出当前系统中所有正在运行的 Java 进程、显示 Java 进程的基本信息、执行各种诊断命令以及执行其他操作。提供了丰富的诊断功能,用于监控、诊断和管理 Java 进程。

用法

java 复制代码
jcmd [pid | main-class | command] [options]

其中,pid 是要操作的 Java 进程的 PIDmain-class 是要操作的 Java 进程的主类名,command 是要执行的诊断命令。options 是命令的选项和参数。

示例

查看当前系统中所有正在运行的 Java 进程的 PID 和主类名。

java 复制代码
jcmd

查看 PID21656Java 进程的 JVM 启动参数。

java 复制代码
jcmd 21656 VM.flags

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

相关推荐
阿文_ing17 小时前
JVM 调优实战入门:从 GC 日志分析到参数调优
jvm
旋风菠萝17 小时前
深入理解Java中的Minor GC、Major GC和Full GC
java·jvm·gc
找不到、了17 小时前
JVM如何处理多线程内存抢占问题
java·jvm
purrrew18 小时前
【Java ee初阶】jvm(2)
java·jvm·java-ee
程序猿七度19 小时前
【Arthas实战】使用场景与常用命令
java·jvm·arthas
正在走向自律1 天前
2025年、2024年最新版IntelliJ IDEA下载安装过程(含Java环境搭建+Maven下载及配置)
java·jvm·jdk·maven·intellij-idea
purrrew1 天前
【Java ee初阶】jvm(1)
java·jvm·java-ee
Javatutouhouduan1 天前
线上问题排查:JVM OOM问题如何排查和解决
java·jvm·数据库·后端·程序员·架构师·oom
purrrew1 天前
【Java ee初阶】jvm(3)
java·jvm
Haooog2 天前
Java 面向对象详解和JVM底层内存分析
java·jvm