自 Java 5 起,JDK 內建 JConsole;Java 6u12 引入 VisualVM(NetBeans 平台構建)。兩者無需額外安裝、零侵入式附加、支援本地/遠程監控,是開發、測試、生產環境通用的「第一響應」工具。
# 命令列
jconsole
# 或雙擊 $JAVA_HOME/bin/jconsole.exe
啟動後自動列出本機可連接 JVM(含自身),雙擊即可。
目標 JVM 啟動參數:
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=9004 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Djava.rmi.server.hostname=10.0.0.5 # 關鍵:指定對外 IP
JConsole 連接字串:
service:jmx:rmi:///jndi/rmi://10.0.0.5:9004/jmxrmi
防火牆提示:JMX 使用兩個端口(註冊端口 + RMI 隨機端口),建議配置 -Dcom.sun.management.jmxremote.rmi.port=9004 固定雙端口,僅開放兩個端口即可。
| 分頁 | 關鍵指標 | 典型用途 |
|---|---|---|
| 概覽 | 堆/非堆、線程、類、CPU 單圖聚合 | 快速健康檢查 |
| 記憶體 | 各代使用量、GC 次數/耗時、堆轉儲按鈕 | OOM 排查、GC 調優、導出 Heap Dump |
| 線程 | 線程數、峰值、死鎖檢測、堆疊快照 | 卡頓、死鎖、線程洩漏 |
| 類 | 載入/卸載總數趨勢圖 | ClassLoader 洩漏 (PermGen/Metaspace OOM) |
| MBeans | 所有註冊 MBean 屬性/操作/通知 | 動態調整 Log Level、觸發 GC、自定義監控 |
com.sun.management.HotSpotDiagnostic → dumpHeap) → 離線 MAT 分析支配樹。.txt 供團隊協作分析。MBeans → org.apache.logging.log4j2 或 ch.qos.logback → 找到 Logger → 修改 level 屬性 → 即時生效。
| 維度 | JConsole | VisualVM |
|---|---|---|
| 啟動速度 | 極快 (Swing) | 較慢 (NetBeans Platform) |
| CPU/記憶體開銷 | 極低 | 中等 |
| Heap Dump 分析 | 僅導出,不分析 | 內建簡易分析 (類別、實例、支配樹) |
| Profiling (CPU/記憶體採樣) | 不支援 | 支援 (需目標 JVM 載入 jfluid-server) |
| 插件生態 | 無 | 豐富 (GCViewer, Maven, TDA 等) |
| 適用場景 | 生產環境輕量附加、快速看指標 | 開發/測試環境深度分析、Profiling |
JConsole 本身就是標準 Java 應用,可編寫 JConsolePlugin 實現自定義分頁。範例專案:$JAVA_HOME/demo/management/JConsolePlugin。
步驟:
com.sun.tools.jconsole.JConsolePlugin。jconsole -pluginpath /path/to/plugin.jar。JConsole 與 VisualVM 是 Java 開發者「隨身聽診器」。掌握它們的核心分頁、遠程連接、Heap Dump 導出、MBean 動態管理,即可應對 90% 的線上性能詢問。下一步進階請學習 jstat/jstack/jmap 命令列組合拳(見本系列第 2 篇)與 Eclipse MAT 深度堆分析。

51CTO 推薦 JVM 專題