一、JVM參數調優
- 內存配置
- 設置初始堆(-Xms)和最大堆(-Xmx)為相同值,避免動態擴展開銷,如
-Xms4g -Xmx4g
。
- 根據物理內存調整,建議不超過物理內存的3/4,預留部分內存給系統和其他進程。
- 垃圾回收器選擇
- 大內存堆(>4GB)選G1:
-XX:+UseG1GC
,可設置最大GC停頓時間(如 -XX:MaxGCPauseMillis=200
)。
- 多核CPU、高吞吐量場景選Parallel GC:
-XX:+UseParallelGC
。
- 內存區域比例
- 調整新生代與老年代比例(-XX:NewRatio,默認2,即老年代占2/3)。
- 調整Eden區與Survivor區比例(-XX:SurvivorRatio,默認8,即Eden占8/10)。
- 其他參數
- 啟用GC日志:
-XX:+PrintGCDetails -XX:+PrintGCDateStamps
,便于分析。
- 禁用偏向鎖(Java 15+默認禁用):
-XX:-UseBiasedLocking
。
二、系統級優化
- 內核參數調整
- 增加文件描述符限制:編輯
/etc/security/limits.conf
,設置 * soft nofile 65535
。
- 優化網絡參數:
net.ipv4.tcp_max_syn_backlog=8192
、net.core.somaxconn=1024
。
- 資源管理
- 關閉Swap(若內存充足):
swapoff -a
,或調整 vm.swappiness=1
。
- 使用ZRAM壓縮內存交換(需安裝):減少磁盤I/O。
三、工具與監控
- JVM監控工具
- 命令行:
jstat
(監控GC)、jmap
(生成堆轉儲)、jstack
(線程分析)。
- 圖形化:
jvisualvm
、JConsole
,實時查看內存和線程狀態。
- APM工具
- Prometheus + Grafana:監控系統指標和JVM性能。
- Arthas:動態追蹤Java應用運行狀態,排查性能問題。
四、注意事項
- 調優前需通過壓測定位性能瓶頸(如CPU、內存、GC頻率)。
- 生產環境修改參數后需充分測試,避免引入新問題。
- 定期分析GC日志,根據實際使用情況調整內存和GC策略。
參考來源:[1,2,3,4,5,6,7,8,9,10,11]