线上jvm参数无万能模板,但有经大厂验证的稳定基线:堆内存需-xms与-xmx相等,容器环境启用-xx:+usecontainersupport,新生代占30%–50%,元空间设上下限,zgc适合高并发低延迟场景,g1适用于通用微服务,必须开启gc日志及oom自动堆转储。

线上环境 JVM 参数没有“万能模板”,但有可直接复用、经大厂验证的稳定基线。核心不是堆参数堆得多,而是让内存可控、GC可查、故障可溯。
必须统一的堆内存配置
初始堆(-Xms)和最大堆(-Xmx)必须相等,否则运行中扩容会触发 Full GC,造成卡顿抖动。
- 4GB 堆:-Xms4g -Xmx4g
- 8GB 堆:-Xms8g -Xmx8g
- 不建议单实例堆超过 16GB —— G1/ZGC 在超大堆下 GC 策略更复杂,风险上升
- 容器环境下(Docker/K8s),需配合 -XX:+UseContainerSupport,避免 JVM 误读宿主机内存
新生代与元空间的合理基线
新生代大小影响 Minor GC 频率;元空间不设上限,极易因动态类加载吃光物理内存。
- 新生代建议占堆 30%–50%:-Xmn1.5g(对应 4g 堆)、-Xmn4g(对应 8g 堆)
- 元空间必须设上下限:-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m
- Spring Boot 类多、代理多,建议 MaxMetaspaceSize 至少 512m;若用字节码增强框架(如 ByteBuddy),可设至 1g
GC 收集器按场景选型
别再默认用 Parallel GC——它适合批处理,不适合 Web 请求类服务。
- 高并发低延迟业务(支付、实时查询、网关):JDK11+ 直接用 ZGC,加 -XX:+UseZGC
- 通用微服务/后台系统(管理后台、定时任务、非核心接口):G1 是当前最稳选择,加 -XX:+UseG1GC
- 禁用 CMS(已废弃)、慎用 Shenandoah(社区支持弱于 ZGC/G1)
日志与兜底是生产底线
没日志的 JVM 就像没仪表盘的车,出问题只能靠猜。
- 强制开启 GC 日志:-Xlog:gc*:file=/data/jvm/gc.log:time,tags,level —— JDK11+ 推荐用统一 -Xlog,替代老旧 -XX:+PrintGCDetails
- OOM 必须自动生成堆快照:-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/jvm/dump/
- 加 -XX:+ExitOnOutOfMemoryError,避免 OOM 后进程僵死、持续占用资源
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











