團隊嘗試過:SQL 優化(建索引、冗餘字段消除多表關聯)、OS/DB 參數調優、專家巡檢——均無效。最終通過分析 heapdump 與 javacore 定位根因。
| 工具 | 用途 | 獲取方式 |
|---|---|---|
| HeapAnalyzer (ha36.jar) | 分析堆快照,找出佔用記憶體最大的對象 | alphaWorks |
| Thread and Monitor Dump Analyzer (jca37.jar) | 分析 javacore,識別死鎖、阻塞、類加載器洩漏 | IBM 支援站 |
啟動參數需分配足夠堆:
java -Xmx2000m -jar ha36.jar heapdump.phd
java -Xmx1000m -jar jca37.jar

結果顯示「載入對象過多」,但無法定位具體模組。因可讀性差、缺乏代碼層面關聯,陷入僵局。

分析 javacore.20090602.134015.430370.txt 關鍵發現:
Failure caused because the class loader limit was exceeded
JRE 版本:J2RE 5.0 IBM J9 2.3 (SR4, 2007-02-01)
Note:SR4 預設類加載器上限 8192,超過拋出 OOM。可用
-Xmxcl25000提高上限。


結合 Current Thread 名稱搜尋應用日誌,定位到某定時排程:
JCA 同時提供 GC 狀態、線程狀態詳細數據輔助驗證:


在 JVM 啟動參數添加:
-Xmxcl25000
取消每日重啟排程,持續監控數周 —— 零 OOM 宕機。
事後補充:Grester v1.0.1 已發布至 Maven 中央倉庫,但 Jester 核心 JAR 仍需手動安裝。
半年攻堅,轉向 javacore 分析後一小時定位。工具不會說謊,關鍵在於: