WebSphere、Liberty 等產品常用 IBM JDK (現 Eclipse OpenJ9)。其 GC 架構、堆管理、參數命名與 HotSpot 迥異。本文系統梳理 IBM JDK 核心參數、GC 政策選型、堆擴縮容控制、大對象區、生產環境最佳實踐。
| 參數 | 含義 | HotSpot 對應 | 建議 |
|---|---|---|---|
-Xms | 初始堆大小 | -Xms | 設為 -Xmx 70-80%,避免頻繁擴容 |
-Xmx | 最大堆大小 | -Xmx | 物理內存 60-70%,留足 OS/Metaspace/CodeCache |
-Xmn | 新生代大小 (Gencon 模式) | -Xmn | 若固定新生代,設為 -Xmx 25-33% |
-Xmns/-Xmnx | 新生代最小/最大 (自適應) | -XX:NewRatio 等 | 啟用自適應時配置范圍 |
-Xmo/-Xmos/-Xmox | 老年代大小/最小/最大 | - | 通常不單獨設,由總堆減新生代得出 |
| 政策 | 特點 | 適用場景 | 關鍵參數 |
|---|---|---|---|
optthruput (默認) | 並行標記-掃描-壓縮,停頓長,吞吐優先 | 批處理、後台任務、無響應要求 | -Xgc:optthruput |
optavgpause | 並發標記 + 並行掃描壓縮,目標平均停頓 | 響應敏感服務,舊版推薦 | -Xgc:optavgpause -XpauseTarget=100ms |
gencon | 分代:新生代複製 + 老年代並發標記掃描,停頓短、吞吐高 | 現代 Web/微服務首選 | -Xgcpolicy:gencon -Xmn... |
balanced | 區域化、增量壓縮、可預測停頓 (類 G1) | 大堆 (>>4GB)、嚴格 SLA | -Xgcpolicy:balanced -XpauseTarget=50ms |
metronome | 硬實時、增量、極低停頓 | 嵌入式、實時控制 | -Xgcpolicy:metronome |
強烈建議生產 Web 服務直接啟用 -Xgcpolicy:gencon,並配置合理新生代。
IBM JDK 默認堆可變 (-Xms != -Xmx),擴縮容由 -Xminf/-Xmaxf (GC 後自由空間比例)、-Xmine/-Xmaxe (單次擴縮量) 控制。
-Xminf0.5 -Xmaxf0.8 (GC 後保持 50-80% 自由空間),觸發更積極擴容;-Xmine (單次擴容最小值) 減少擴容頻率;-verbose:gc,觀察 <expansion> <shrinkage> 標籤,目標 GC 後自由空間 ≈ 50%。-Xloainitial0.1 -Xloamaximum0.6 (初始 10%、最大 60%),大對象密集應用 (圖片、報文、緩存) 需調大初始值;-Xk -Xp 設置 kCluster/pCluster 將固定對象聚集;-Xmn2g 或 -Xmns1g -Xmnx3g);-verbose:gc # GC 日志 (必開)
-Xverbosegclog:gc.log,10,10000 # 滾動日志 10 個 10MB
-Dcom.ibm.tools.attach.enable=yes # 啟用 Attach API (jcmd/arthas)
-XX:+HeapDumpOnOutOfMemoryError # OOM 自動 Dump
-XX:HeapDumpPath=/dumps/ # 指定 Dump 目錄 (防撐爆根分區)
-XX:+DumpOnCrash # Crash 產生 System Dump
物理內存 > 4GB 時,啟動 /3GB (boot.ini/bcdedit) 使進程用戶空間達 3GB,JVM 堆可設至 ~2.5GB (實測 1.7-2GB 穩定),其餘 1GB 供線程棧/直接內存/代碼緩存。
gencon,大堆選 balanced;-Xmn 設為堆 1/3,-Xminf0.5 -Xmaxf0.8 穩定自由空間;參考官方文檔:IBM JDK JVM Options。