JDK自带的JConsole和VisualVM可实时监控JVM状态,无需额外安装;本地进程开箱即用,远程监控需配置JMX参数;核心关注内存(Eden/Survivor/老年代)、线程(死锁检测与堆栈)、类加载量及VM概要,并利用VisualVM的堆Dump、采样和插件进行深度分析。

直接用 JDK 自带的 JConsole 和 VisualVM 就能实时看 JVM 运行状态,不需要装额外软件。关键不是“能不能连上”,而是连上之后怎么看懂关键指标、怎么定位真实问题。
本地进程监控:不用配参数,开箱即用
两者都默认支持本地 Java 进程自动发现:
- JConsole 启动后(
jconsole或双击jconsole.exe),左侧列表直接显示本机所有 Java 进程,选中就能连; - VisualVM 启动(
visualvm或运行jvisualvm.exe)同样自动列出本地 JVM,点一下就接入; - 适合开发调试、测试环境快速查看——比如刚启动一个 Spring Boot 应用,立刻看内存曲线是否平稳、线程数是否异常飙升。
远程监控:必须加 JVM 启动参数
要监控服务器上的应用,JVM 必须主动暴露 JMX 接口。常用参数组合(生产环境务必关闭 authenticate=false 并启用认证):
-
-Dcom.sun.management.jmxremote:开启 JMX 远程管理; -
-Dcom.sun.management.jmxremote.port=9999:指定监听端口; -
-Djava.rmi.server.hostname=服务器公网IP:避免 RMI 绑定内网地址导致连接失败; -
-Dcom.sun.management.jmxremote.ssl=false和-Dcom.sun.management.jmxremote.authenticate=false:仅限测试环境临时使用; - 阿里云/腾讯云记得在安全组放行对应端口。
连接时,在工具里填 IP:端口 即可,比如 120.79.10.25:9999。
重点看什么:四个核心页签的实际用途
连上之后别只盯着“概览”图表,真正有用的信息藏在具体页签里:
- 内存页签:不只是看“已使用”数字。要点开“堆内存”查看 Eden、Survivor、老年代各自占比变化;GC 频次突然上升?说明对象晋升太快或内存不足;
- 线程页签:点击“检测死锁”按钮,工具会自动扫描并标出阻塞链;再点某个线程的“堆栈跟踪”,能看清它卡在哪一行代码、持有哪些锁;
- 类页签:关注“已加载类数量”是否持续增长——可能是动态代理或反射频繁生成新类,引发 Metaspace 溢出;
-
VM 概要:确认实际使用的 GC 算法(如
UseG1GC)、堆大小(MaxHeapSize)、JDK 版本,这些直接影响监控数据解读逻辑。
VisualVM 的进阶能力:比 JConsole 多一步就能挖更深
JConsole 适合“有没有问题”,VisualVM 解决“问题在哪”:
- 点“堆 Dump”生成
hprof文件,用内置分析器看哪些类实例最多、谁持有大量对象引用; - 点“抽样(Sampler)”→“内存”,几秒内识别出占用内存 Top 10 的对象类型;
- 装插件如 Visual GC,直接看到 G1 或 ZGC 的分区使用、GC 停顿时间分布;
- 右键进程 → “打开文件”可关联查看该 JVM 的 GC 日志(需启动时加
-Xloggc:gc.log)。











