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

通過 JVM 統計信息分析 Apache Geronimo 性能:jvmstat 與 Visual GC 實戰

     編輯:Java 相關知識

JVM 關鍵統計指標

類別關鍵指標意義
JIT 編譯編譯次數、累計耗時熱點代碼優化開銷
類加載加載/卸載數量、耗時類加載器行為、洩漏排查
堆內存已用/空閒大小內存洩漏最直觀信號
垃圾收集頻率、耗時、分代分佈應用停頓來源、調優方向

命令行快速檢視

java -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps MyApp
# 輸出範例
[GC 70333K->65666K(98896K), 0.0007817 secs]
[Full GC 65666K->59333K(98896K), 0.0205250 secs]

圖形化利器:jvmstat + Visual GC

安裝與啟動

  1. 下載 jvmstat,解壓加入 PATH。
  2. 需 JDK 5+ 運行工具,可監控 1.4.2+ 進程。
  3. jps 列出 Java 進程 ID (LVMI)。
  4. visualgc <lvmid> 或 java -Xbootclasspath/p:$JAVA_HOME/lib/tools.jar -jar $JVMSTAT_HOME/jars/visualgc.jar <lvmid>。

Visual GC 窗口解讀

  • 概覽頁:JIT 編譯、類加載器、GC 總計(如 123 次 GC 耗 0.3s,佔運行時間 0.3%)。
  • 堆分代圖:Eden(新對象)、Survivor 0/1(少數 GC 存活)、Old(多次 GC 存活,穩定增長暗示洩漏)、Perm(永久對象)。
  • 直方圖:Survivor 空間對象年齡分佈。

實戰:監控 Geronimo 啟動與示例應用

啟動階段

Geronimo 啟動 Visual GC JIT/類加載/GC 概覽 Survivor 直方圖

  • -server 模式啟動:類加載多、JIT 少、啟動慢但吞吐高,適合生產。
  • 啟動後 Old/Perm 區趨於平穩,無明顯洩漏跡象。

JSPX-XHTML 示例應用

示例應用 GC 動作

  • 請求處理時對象突增,渲染完成後大量回收,符合預期。
  • 伴隨 JIT 編譯與類加載事件。

自測程序:StatGen

public class StatGen {
    static final int MAX_BLOCK = 8*1024*100;
    public static void main(String[] args) {
        int loops = args.length > 0 ? Integer.parseInt(args[0]) : 1;
        List<long[]> list = new ArrayList<>();
        for (int i=0; i<loops; i++) {
            int sz = (int)(Math.random()*MAX_BLOCK);
            long[] arr = new long[sz];
            if (sz % 5 == 0) list.add(arr); // 模擬 20% 洩漏
            Thread.sleep(500);
        }
    }
}

運行 java StatGen 100,配合不同 -Xms/Xmx、GC 算法觀察 Visual GC 變化,快速建立直覺。

總結

JVM 統計信息是調優利器。jvmstat/Visual GC 提供可視化洞察,結合命令行參數實驗,能快速定位內存洩漏、GC 停頓、類加載異常等問題。Geronimo 目標高性能,JVM 監控是不可或缺的補充手段。

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