常见 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)进行优化。

相关推荐
jmxwzy几秒前
JVM(java虚拟机)
jvm
Maỿbe28 分钟前
JVM中的类加载&&Minor GC与Full GC
jvm
人道领域2 小时前
【零基础学java】(等待唤醒机制,线程池补充)
java·开发语言·jvm
小突突突2 小时前
浅谈JVM
jvm
饺子大魔王的男人3 小时前
远程调试总碰壁?局域网成 “绊脚石”?Remote JVM Debug与cpolar的合作让效率飙升
网络·jvm
天“码”行空13 小时前
java面向对象的三大特性之一多态
java·开发语言·jvm
独自破碎E18 小时前
JVM的内存区域是怎么划分的?
jvm
期待のcode20 小时前
认识Java虚拟机
java·开发语言·jvm
leaves falling1 天前
一篇文章深入理解指针
jvm
linweidong1 天前
C++ 中避免悬挂引用的企业策略有哪些?
java·jvm·c++