JVM调优

使用jps和jinfo进行查看
1、jps:查看java的后台进程
2、jinfo:查看正在运行的java程序


管理员身份运行cmd !

jps命令

jps(JVM Process Status)是 JDK 自带的命令行工具,用于列出当前系统中所有正在运行的 Java 进程及其进程 ID(PID)。它类似于 Linux 的 ps 命令,但专门针对 Java 虚拟机。

jps [选项] [hostid]

快速查找 Java 进程 PID
`jps -l`

确认 JVM 内存配置
`jps -v`

脚本中获取 PID
`jps -q`

排查启动参数问题
`jps -lvm`

不加选项时,默认输出进程 PID 和主类名称(或 Jar 包名)。

image-20260310110155786

jinfo 命令使用指南

jinfo(Java Information)是 JDK 自带的命令行工具,主要用于查看 Java 进程的 JVM 配置信息、系统属性以及部分可动态修改的参数。

1. 基本语法

jinfo [选项] <pid>

:目标 Java 进程的进程 ID。

2. 常用参数

  • 无参数:打印进程的所有 JVM 参数和系统属性。

  • -flags:仅打印 JVM 命令行标志参数。

  • -sysprops:仅打印 Java 系统属性(类似 System.getProperties())。

  • -flag :打印指定名称的参数值。

  • -flag [+|-]:开启或关闭指定的布尔类型参数(需 JVM 支持动态修改)。

  • -flag =:设置指定参数的值(需 JVM 支持动态修改)。

  • -help:显示帮助信息。

3. 使用示例

查看指定进程的所有配置信息
bash jinfo 12345
查看指定进程的最大堆内存设置
bash jinfo -flag MaxHeapSize 12345
查看指定进程的系统属性
bash jinfo -sysprops 12345
动态开启 GC 打印日志(如果 JVM 支持)
bash jinfo -flag +PrintGC 12345

如果您想确认 JVM 使用了哪种垃圾收集器或堆内存设置,可以使用 jinfo 查看相关标志。

# 查看所有 JVM 参数,从中筛选 GC 相关配置

 jinfo -flags <pid> 

# 查看具体的 GC 参数,例如最大堆大小

 jinfo -flag MaxHeapSize <pid> 

# 查看使用的垃圾收集器配置

 jinfo -flag +UseG1GC <pid>  # 验证是否开启了 G1

4. 注意事项

权限要求:通常需要与启动 Java 进程的用户相同,或使用 root/admin 权限。
动态修改限制:并非所有 JVM 参数都支持运行时动态修改,尝试修改不支持的参数会报错。
适用环境:适用于 HotSpot 等主流 JVM,不同 JDK 版本可能略有差异。
进程状态:目标进程必须处于运行状态,无法用于已崩溃的进程(此时应使用 jhsdb 或分析 dump 文件)。

使用 jstat 查看 GC 实时统计

如果您需要查看 GC 的运行时数据(如回收次数、耗时、堆内存使用率),应使用 jstat

# 每隔 1000ms 打印一次 GC 统计信息,共打印 10 次
jstat -gc <pid> 1000 10

# 查看各代内存使用情况(单位 KB)
jstat -gcutil <pid> 1000 10

image-20260310110301206

使用 jstack 查看线程信息

如果您想查看线程栈信息(包括 GC 线程的状态),应使用 jstack

# 打印进程所有线程的堆栈信息
jstack <pid>

# 查找GC相关线程(输出中通常包含VM Thread, GC task thread等) PS:grep是Linux/Unix系统的命令,Windows默认不包含该工具
jstack <pid> | grep -i gc

如何排查死锁

当我们出现死锁的时候,首先需要使用jps命令查看运行的程序jps -l

再使用jstack查看堆栈信息

jstack  xxxx   # 后面参数是 jps输出的该类的pid

通过查看最后一行,我们看到 Found 1 deadlock,即存在一个死锁


image

posted @ 2026-03-10 11:13  yub4by  阅读(4)  评论(0)    收藏  举报