线上Java应用出现性能瓶颈?内存泄漏导致OOM?GC频繁导致服务卡顿?工欲善其事,必先利其器。本文将全面介绍JVM性能监控三大神器(JConsole、JVisualVM、Arthas)、内存分析工具(MAT、HeapHero)以及GC日志分析工具,助你快速定位和解决JVM问题。文末附完整JVM知识体系课程总结,建议收藏!
📋 文章目录
- 一、性能监控工具
- 1.1 JConsole:JDK自带的监控神器
- 1.2 JVisualVM:全能型监控分析工具
- 1.3 Arthas:阿里开源的线上诊断利器
- 二、内存分析工具
- 2.1 MAT(Memory Analyzer Tool)
- 2.2 HeapHero
- 2.3 Perfma(笨马)
- 三、GC日志分析工具
- 3.1 不同收集器日志格式解析
- 3.2 GCViewer
- 3.3 GCEasy
- 3.4 GCPlot
- 四、JVM知识体系完整课程总结
- 五、总结与工具选型建议
一、性能监控工具
1.1 JConsole:JDK自带的监控神器
JConsole是JDK自带的图形化性能监控工具,位于%JAVA_HOME%/bin目录下。
启动方式
# 方式1:直接运行jconsole# 方式2:在命令行输入%JAVA_HOME%/bin/jconsole连接方式
本地连接:
- JConsole自动寻找本地可监控进程
- 选择对应进程即可进入监控界面
远程连接:
被监控JVM需要添加以下启动参数:
-Dcom.sun.management.jmxremote.port=1090-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false连接时输入IP地址和端口号(如:10.20.618.11:8082)即可。
监控面板功能
| 面板 | 功能说明 |
|---|---|
| 概述 | 显示堆内存、线程、类、CPU使用情况的实时曲线 |
| 内存 | 查看堆内存、非堆内存、内存池(Eden、Survivor、Old Gen)的占用情况,支持手动执行GC |
| 线程 | 显示实时线程数,查看线程详细状态、堆栈追踪,支持死锁检测 |
| 类 | 显示已装入类数目、已卸载类数目 |
| VM摘要 | 显示服务器详细资源信息(线程、类、OS、内存等) |
| MBean | JMX管理的资源配置 |
实战案例:垃圾回收观察
测试代码(全局变量,不会回收):
publicclassJconsoleTest1{// bytes为全局变量publicbyte[]bytes=newbyte[1024*1024];publicstaticvoidmain(String[]args){System.out.println("开始..");