JVM常见工具

发布于:2025-07-27 ⋅ 阅读:(19) ⋅ 点赞:(0)

命令行工具

jps - 查看Java进程

这是最基础的工具,相当于Linux的ps命令,专门用来查看Java进程。

基本用法:

jps                    # 显示所有Java进程
jps -l                 # 显示完整的类名或jar包路径
jps -v                 # 显示JVM参数
jps -m                 # 显示传给main函数的参数

实际场景:
当服务器上跑了多个Java应用,你想知道哪个进程是你要监控的时候,jps就派上用场了。比如你的应用叫UserService,直接jps -l就能找到对应的进程ID。

jstat - 监控JVM统计信息

这个工具能告诉你内存使用情况、垃圾回收频率等关键指标。

常用命令:

jstat -gc pid                    # 查看垃圾回收情况
jstat -gcnew pid                 # 统计新生代的情况
jstat -gccapacity pid            # 查看各代内存容量
jstat -gcutil pid                # 查看各代内存使用百分比

输出结果:

  • S0C、S1C:Survivor区容量
  • EC:Eden区容量
  • OC:老年代容量
  • YGC:年轻代GC次数
  • YGCT:年轻代GC耗时
  • FGC:Full GC次数
  • FGCT:Full GC耗时

jmap - 内存映像工具

这个工具主要用来分析内存使用情况,特别是在发生内存溢出时,它能帮你保留现场。

常用命令:

jmap -histo pid                           # 查看对象分布统计
jmap -histo pid | head -20                # 只看前20行
jmap -dump:format=b,file=heap.hprof pid  # 生成堆转储文件
jmap -dump:live,format=b,file=heap.hprof pid  # 只dump存活对象

jstack - 线程堆栈分析

这个工具用来查看所有线程在干什么,特别适合排查死锁、线程阻塞等问题。

基本用法:

jstack pid                    # 查看所有线程状态
jstack pid > threads.txt      # 保存到文件

怎么看线程状态:

  • RUNNABLE:正在运行
  • BLOCKED:被阻塞,等待获取锁
  • WAITING:等待被唤醒
  • TIMED_WAITING:限时等待

jinfo - 查看和修改JVM参数

这个工具可以在不重启应用的情况下查看甚至修改某些JVM参数。

常用命令:

jinfo pid                              # 查看所有JVM参数
jinfo -flags pid                       # 只查看-XX参数
jinfo -flag PrintGC pid                # 查看某个具体参数
jinfo -flag +PrintGC pid               # 开启某个参数
jinfo -flag -PrintGC pid               # 关闭某个参数

图形化工具

JConsole - 基础监控工具

JConsole是JDK自带的图形化监控工具,界面简单直观。

启动方式:

jconsole                    # 直接启动,选择要监控的进程
jconsole pid                # 直接连接指定进程

在这里插入图片描述
在这里插入图片描述

主要功能:

  • 内存使用情况:能看到各个内存区域的使用趋势
  • 线程情况:包括线程数量、死锁检测
  • 类加载情况:已加载的类数量

VisualVM - 功能全面的分析工具

VisualVM功能比JConsole强大很多,是很多开发者的首选。
在这里插入图片描述
在这里插入图片描述

主要功能:

  • 实时监控:CPU、内存、线程使用情况
  • 性能分析:CPU采样、内存采样
  • 堆转储分析:可以直接在工具内分析heap dump文件

使用建议:
VisualVM特别适合本地开发时使用。如果要监控远程服务器,需要配置JMX连接参数。

Arthas - 阿里开源的神器

Arthas是阿里开源的Java诊断工具,可以说是目前最好用的线上诊断工具,没有之一。
基础诊断:

dashboard          # 实时查看系统信息,比jstat更直观
thread             # 查看线程信息,比jstack更详细
jvm                # 查看JVM信息
memory             # 查看内存信息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从Arthas的一些基本命令我们就可以得到非常丰富、全面的信息,比之前的命令行工具好用多了。

作用:

  1. 它可以实时监控方法调用、追踪性能瓶颈、分析内存和线程问题。
  2. 以前线上出问题只能通过日志猜测或者重启应用,现在用Arthas可以调用链路耗时、线程状态等详细信息,更有利于我们排查线上问题。

网站公告

今日签到

点亮在社区的每一天
去签到