首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2EE

Java 性能調優入門:JConsole 與 VisualVM 核心技法

     編輯:J2EE

前言:內建分析器,開箱即用

自 Java 5 起,JDK 內建 JConsole;Java 6u12 引入 VisualVM(NetBeans 平台構建)。兩者無需額外安裝、零侵入式附加、支援本地/遠程監控,是開發、測試、生產環境通用的「第一響應」工具。

1. 快速啟動與連接

本地連接

# 命令列
jconsole
# 或雙擊 $JAVA_HOME/bin/jconsole.exe

啟動後自動列出本機可連接 JVM(含自身),雙擊即可。

遠程連接 (JMX)

目標 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 固定雙端口,僅開放兩個端口即可。

2. 核心分頁解讀

分頁關鍵指標典型用途
概覽堆/非堆、線程、類、CPU 單圖聚合快速健康檢查
記憶體各代使用量、GC 次數/耗時、堆轉儲按鈕OOM 排查、GC 調優、導出 Heap Dump
線程線程數、峰值、死鎖檢測、堆疊快照卡頓、死鎖、線程洩漏
類載入/卸載總數趨勢圖ClassLoader 洩漏 (PermGen/Metaspace OOM)
MBeans所有註冊 MBean 屬性/操作/通知動態調整 Log Level、觸發 GC、自定義監控

3. 實戰技法

3.1 記憶體洩漏快速定位

  1. 觀察「記憶體」分頁:老年代階梯式增長、Full GC 後不下降。
  2. 點擊「執行 GC」按鈕強制 Full GC,再觀察。
  3. 切換到「類」分頁:若類數持續上升 → ClassLoader 洩漏。
  4. 導出 Heap Dump (MBeans → com.sun.management.HotSpotDiagnostic → dumpHeap) → 離線 MAT 分析支配樹。

3.2 線程卡頓/死鎖現場保存

  • 「線程」分頁 → 勾選「死鎖檢測」 → 若有死鎖會列出線程 ID。
  • 點擊線程名查看完整堆疊,或「導出」保存為 .txt 供團隊協作分析。

3.3 動態調整日誌級別 (無需重啟)

MBeans → org.apache.logging.log4j2 或 ch.qos.logback → 找到 Logger → 修改 level 屬性 → 即時生效。

4. JConsole vs VisualVM:如何選擇?

維度JConsoleVisualVM
啟動速度極快 (Swing)較慢 (NetBeans Platform)
CPU/記憶體開銷極低中等
Heap Dump 分析僅導出,不分析內建簡易分析 (類別、實例、支配樹)
Profiling (CPU/記憶體採樣)不支援支援 (需目標 JVM 載入 jfluid-server)
插件生態無豐富 (GCViewer, Maven, TDA 等)
適用場景生產環境輕量附加、快速看指標開發/測試環境深度分析、Profiling

5. 進階:擴展 JConsole 插件

JConsole 本身就是標準 Java 應用,可編寫 JConsolePlugin 實現自定義分頁。範例專案:$JAVA_HOME/demo/management/JConsolePlugin。

步驟:

  1. 實作 com.sun.tools.jconsole.JConsolePlugin。
  2. 打包 JAR,META-INF/services/com.sun.tools.jconsole.JConsolePlugin 列出實現類。
  3. 啟動:jconsole -pluginpath /path/to/plugin.jar。

結語

JConsole 與 VisualVM 是 Java 開發者「隨身聽診器」。掌握它們的核心分頁、遠程連接、Heap Dump 導出、MBean 動態管理,即可應對 90% 的線上性能詢問。下一步進階請學習 jstat/jstack/jmap 命令列組合拳(見本系列第 2 篇)與 Eclipse MAT 深度堆分析。


51CTO 推薦 JVM 專題

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved