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

VisualVM 實戰:本地/遠程監控、內存洩漏分析、GC 調優、CPU 熱點定位全流程

     編輯:Java 相關知識

VisualVM 是 JDK 內建的全能監控分析工具,整合 jstat、JConsole、jstack、jmap、jinfo。本文從安裝啟動到生產級問題排查,構建完整實戰知識體系。

一、 獲取與啟動

  • JDK 1.6u7+:$JAVA_HOME/bin/jvisualvm.exe 直接運行。
  • NTFS 分區啟動失敗:快捷方式目標添加 -J-XX:+PerfBypassFileSystemCheck。
  • MyEclipse 集成:Window → Show View → Other → VisualVM。

二、 界面與插件

  • Applications 面板:Local(本地 JVM)、Remote(遠程 JMX)。
  • 核心標籤:Overview、Monitor(實時圖表)、Threads、Sampler(CPU/內存採樣)、Profiler(深度剖析)。
  • 必裝插件:Tools → Plugins → Available Plugins → 全選安裝(Visual GC、MBeans、Tracer 等)。

三、 內存洩漏排查實戰

1. 四類洩漏模型

  • 頻發性:每次執行洩漏固定量。
  • 偶發性:特定條件觸發。
  • 一次性:僅首次執行洩漏。
  • 隱式:長時間不釋放,最終耗盡。

2. Heap Dump 對比法

  1. 間隔 1-2 分鐘連續 Dump 3 次(工具欄 Heap Dump)。
  2. 對比類實例數增長趨勢,定位持續增長對象(如 org.eclipse.swt.graphics.Image)。
  3. 查看 GC Roots 引用鏈,找到持有者(如未關閉的圖片資源)。
  4. 代碼修復:及時 dispose、弱引用、對象池復用。

四、 OOM 兩大經典場景與參數調優

錯誤類型原因關鍵參數調優策略
PermGen Space / Metaspace類元數據過多(熱部署、大量 JAR)-XX:PermSize / -XX:MaxPermSize (JDK7)
-XX:MetaspaceSize / -XX:MaxMetaspaceSize (JDK8+)
監控 Classes 曲線,設定穩定值上限+20%
Java Heap Space對象過多/大對象/洩漏-Xms -Xmx (建議等值)
-Xmn / -XX:NewRatio
觀察 Used Heap 鋸齒圖,無下降=洩漏;調大堆、優化代碼、檢查大對象分配

五、 CPU 熱點與線程分析

  • CPU 採樣:Sampler → CPU → 排序找熱點方法。
  • 線程 Dump:Threads → Thread Dump,分析 RUNNABLE(CPU 忙)、BLOCKED(鎖競爭)、WAITING(池等待)。
  • 死鎖檢測:自動標記死鎖線程,查看堆疊定位鎖順序違背。

六、 遠程監控配置

# 目標 JVM 啟動參數
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9090
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=目標服務器IP

VisualVM → Remote → Add → 輸入 IP:Port 連接。

七、 總結

VisualVM 是「瑞士軍刀」:監控、Dump、採樣、剖析一站式。養成「現象→數據→代碼→驗證」閉環,從救火隊長進化為性能架構師。

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