JRockit 是自適應 JVM,能自動適應硬體,調優重點在於人工干預的關鍵參數:堆大小、Nursery、GC 策略、線程模型。本文系統整理啟動選項、調優步驟、命令行選項表,並以 Method Profiler 診斷 CMP Entity Bean 效能瓶頸為實戰案例。
| 參數 | 說明 | 建議值/策略 |
|---|---|---|
-Xms | 初始堆大小 | 設定與 -Xmx 相同,避免動態擴縮開銷 |
-Xmx | 最大堆大小 | 物理記憶體 75% (如 1024M 物理 → 768M),IA32 上限 1.8G |
-Xns | Nursery (新生代) 大小 | 大量短命物件時調大;gencon 預設 10M/CPU |
-Xgc | GC 策略 | gencon (分代並發) 追求低停頓;parallel 追求高吞吐 |
-Xcleartype | 記憶體清理時機 | gc/alloc/local,IA32 預設 alloc |
-Xallocationtype | 線程分配類型 | 堆 >128M 用 local;大量線程用 global 減少碎片 |
-Xss | 線程棧大小 | 預設 IA32 Win 64K、Linux 128K;大量線程可調小 |
-Xthinthreads | 輕量線程 (實驗性) | Linux 下大量線程有效,IA64 不支援,生產慎用 |
-Xgc:gencon + 適度增大 Nursery (-Xns),監控 -Xgcpause-Xgc:parallel + 最大化堆-Xgcreport 產生報表;-Xverbose:memory 觀察停頓 (僅調試用)-Xthinthreads + -Xallocationtype:global-Xjvmpi 找出熱點方法-X 顯示擴充選項
-Xallocationtype global|local 線程分配類型
-Xbootclasspath 類搜尋路徑
-Xcleartype gc|local|alloc 清理時機
-Xgc gencopy|singlecon|gencon|parallel GC 策略
-Xgcpause 列印 GC 停頓時間
-Xgcreport 列印 GC 報告
-Xjvmpi JVMPI 事件控制
-Xmanagement 啟用管理伺服器
-Xms / -Xmx 初始/最大堆 (K/M/G)
-Xns Nursery 大小
-Xss 線程棧大小
-Xthinthreads 輕量線程
-Xverbose codegen|cpuinfo|gc|load|memory|Opt
-Xverify 完整 bytecode 驗證
壓力測試中 TPS 極低,Response Time 隨時間近線性增長。
-XmanagementTime/Inv(ns) 指標Stateful4CMPBean.ejbCreate() 為瓶頸getNextId()、home.create() 佔比小sheep.setName() 佔絕大多數時間| 並發用戶 | setName 耗時 | getNextId 耗時 | home.create 耗時 |
|---|---|---|---|
| 1 | X | Y | Z |
| 2 | 2X | Y | Z |
| 3 | 3X | Y | Z |
結論:setName() 為串行化邏輯,Oracle UPDATE 隔離級別為 SERIALIZABLE。
移除 sheep.setName(...) 該行程式碼,重測 TPS 大幅提升,Response Time 平穩。
JRockit 調優核心在於「測量 → 分析 → 調整 → 驗證」閉環。Method Profiler 提供程式碼級熱點定位,配合 GC/線程參數微調,能最大化硬體效能。生產環境建議先建立基準測試,再逐步調整單一參數觀察效果。