常见 JVM 工具介绍

1. jps(Java Virtual Machine Process Status Tool)

  • 功能:列出当前用户的所有 Java 进程及其 PID。

  • 常用场景:快速定位目标 Java 应用的进程 ID。

  • 常用命令

    bash复制

    复制代码
    jps -l  # 显示主类全名
    jps -v  # 显示 JVM 启动参数

2. jstat(JVM Statistics Monitoring Tool)

  • 功能:实时监控 JVM 内存、GC、类加载等状态。

  • 常用场景:监控垃圾回收(GC)性能,分析内存使用情况。

  • 常用命令

    bash复制

    复制代码
    jstat -gcutil <pid> 1000 10  # 每 1 秒采样 GC 状态,共 10 次
    jstat -class <pid>  # 类加载统计

3. jmap(Memory Map Tool)

  • 功能:生成堆转储文件(Heap Dump)或查看堆内存对象分布。

  • 常用场景:分析内存泄漏、排查内存溢出问题。

  • 常用命令

    bash复制

    复制代码
    jmap -heap <pid>  # 查看堆内存使用详情
    jmap -histo:live <pid>  # 统计存活对象
    jmap -dump:format=b,file=/path/to/dump.hprof <pid>  # 生成堆转储文件

4. jstack(Stack Trace Tool)

  • 功能:生成线程快照,用于分析线程死锁或高 CPU 问题。

  • 常用场景:排查线程死锁、分析线程状态。

  • 常用命令

    bash复制

    复制代码
    jstack <pid> > thread_dump.txt  # 输出线程快照到文件

5. jcmd(JVM Command Tool)

  • 功能:多功能工具,支持 GC、类加载、线程等诊断。

  • 常用场景:动态调整 JVM 参数、生成堆转储文件、打印线程信息等。

  • 常用命令

    bash复制

    复制代码
    jcmd <pid> VM.flags  # 查看 JVM 参数
    jcmd <pid> GC.heap_info  # 查看堆内存信息
    jcmd <pid> Thread.print  # 打印线程快照

6. jinfo(Java Information Tool)

  • 功能:查看和动态修改 JVM 的运行时参数。

  • 常用场景:查看 JVM 启动参数、动态调整参数。

  • 常用命令

    bash复制

    复制代码
    jinfo -flags <pid>  # 查看 JVM 参数
    jinfo -flag +HeapDumpBeforeFullGC <pid>  # 动态启用 HeapDumpBeforeFullGC

7. jhat(Heap Analysis Tool)

  • 功能:分析 jmap 生成的堆转储文件(Heap Dump)。

  • 常用场景:分析内存泄漏、排查对象占用情况。

  • 常用命令

    bash复制

    复制代码
    jhat /path/to/dump.hprof  # 启动 HTTP 服务器,通过浏览器访问分析结果

8. jconsole(Java Monitoring and Management Console)

  • 功能:图形化工具,用于监控 JVM 的内存、线程、类加载等信息。

  • 常用场景:开发环境中的实时监控和调优。

  • 使用方法 :直接启动 jconsole,选择目标进程进行监控。

9. jmc(Java Mission Control)

  • 功能:高级的图形化监控工具,支持飞行记录器(Flight Recorder)功能。

  • 常用场景:生产环境中的性能监控和问题诊断。

  • 使用方法 :启动 jmc,连接到目标 JVM,进行实时监控或分析飞行记录。

总结

这些工具各有用途,可以根据实际需求选择合适的工具:

  • 开发环境:优先使用图形化工具(如 jconsole、jmc)。

  • 生产环境:推荐使用低开销工具(如 jcmd、jstat)。

  • 深度分析:结合日志分析工具(如 jmap + jhat、MAT)进行优化。

相关推荐
佛祖让我来巡山1 天前
深入理解JVM内存分配机制:大对象处理、年龄判定与空间担保
jvm·内存分配·大对象处理·空间担保·年龄判定
杨杨杨大侠1 天前
打开 JVM 黑匣子——走进 Java 字节码(一)
java·jvm·agent
J2K2 天前
JDK都25了,你还没用过ZGC?那真得补补课了
java·jvm·后端
Slaughter信仰2 天前
深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第十章知识点问答(10题)
java·jvm·数据库
码熔burning2 天前
JVM 垃圾收集算法详解!
jvm·算法
ZzzK,3 天前
JAVA虚拟机(JVM)
java·linux·jvm
西红柿维生素3 天前
JVM相关总结
java·jvm·算法
老赵的博客3 天前
c++ unqiue指针
java·jvm·c++
mkhase3 天前
9.12-QT-基本登陆界面实现
java·jvm·qt
緈諨の約錠3 天前
JVM基础篇以及JVM内存泄漏诊断与分析
java·jvm