摘要纸上得来终觉浅绝知此事要躬宫。本文将前面所有的 JVM 参数、调优方法、监控手段融为一体给出四类典型生产场景的完整配置模板电商交易系统低延迟优先、大数据处理系统吞吐量优先、微服务网关内存受限、长时运行后台任务稳定性优先。每个模板都包含完整的 JAVA_OPTS 配置、GC 日志设置、OOM 处理机制、监控告警阈值以及完整的启动脚本示例。无论你是运维工程师还是后端开发这些模板都能直接拿去做生产配置。引言调优文章看了一堆参数含义背得滚瓜烂熟但真到生产环境配置时还是两眼一抹黑“我到底是选 G1 还是 ZGC”“堆到底设多大”“GC 日志要不要开”“CPU 核数和 GC 线程数怎么配”本文帮你解决这个最后一公里问题。我会给出四套完整的生产配置模板每套都遵循同样的设计原则配置设计原则 ┌──────────────────────────────────────────────────────────────────┐ │ 1. 堆大小-Xms -Xmx避免运行时调整 │ │ 2. GC 算法根据 SLA 选择不盲目追求最新 │ │ 3. GC 日志必开生产问题全靠它 │ │ 4. OOM 处理必开事后分析的唯一资料 │ │ 5. 监控告警可操作不是空话 │ │ 6. 滚动发布预热、渐进扩大堆不触发 Full GC │ └──────────────────────────────────────────────────────────────────┘一、基础配置规范1.1 配置分层结构生产 JVM 配置应该分层组织# 第一层JVM 标准参数必选JAVA_OPTS-server# 第二层堆内存配置JAVA_OPTS$JAVA_OPTS-Xms4g -Xmx4g# 第三层GC 配置JAVA_OPTS$JAVA_OPTS-XX:UseG1GC -XX:MaxGCPauseMillis200# 第四层GC 日志JAVA_OPTS$JAVA_OPTS-Xlog:gc*:file${LOG_DIR}/gc.log:time,uptime,level,tags:filecount10,filesize100m# 第五层OOM 处理JAVA_OPTS$JAVA_OPTS-XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath${LOG_DIR}/heapdump.hprof# 第六层调试和诊断JAVA_OPTS$JAVA_OPTS-XX:AlwaysPreTouch1.2 GC 线程数配置原则# GC 线程数计算公式ParallelGCThreadsmin(ParallelGCThreads,(n -1)*13/101)# n CPU 核心数# G1 并发 GC 线程数ConcGCThreadsmax(1, ParallelGCThreads /4)# 常见配置参考# 4 核ParallelGCThreads3, ConcGCThreads1# 8 核ParallelGCThreads7, ConcGCThreads2# 16 核ParallelGCThreads13, ConcGCThreads4# 32 核ParallelGCThreads21, ConcGCThreads5# 如果机器上还有其他 Java 进程需要减少 GC 线程数# 建议ConcGCThreads ceil(CPU核心数 / 16) * 21.3 容器环境配置Cgroup# 容器中必须显式指定堆大小容器内存 ≠ JVM 堆# 原因JDK 8 默认使用物理内存的一半作为堆上限# 推荐JDK 10 自动感知容器限制# JDK 8 需要显式配置JAVA_OPTS # 容器内存限制感知JDK 8u191 -XX:UnlockExperimentalVMOptions -XX:UseCGroupMemoryLimitForHeap # 或显式计算 -Xmx$(expr$(cat /sys/fs/cgroup/memory/memory.limit_in_bytes2/dev/null||echo4294967296)/1024/1024/1024)g 二、场景一电商交易系统低延迟优先2.1 业务特征分析业务特点 - 延迟敏感TP99 500msTP999 2s - QPS 中等1000~5000 TPS - 峰值明显秒杀/大促时 QPS 翻 10 倍 - 短生命周期对象多订单、会话、缓存 GC 目标 - GC 停顿 200ms - Full GC 间隔 6 小时 - 吞吐量 95%2.2 推荐配置G1#!/bin/bash# 电商交易系统 JVM 配置# 环境变量APP_NAMEecommerce-orderLOG_DIR/var/log/${APP_NAME}HEAP_SIZE8gexportJAVA_OPTS # # 基础参数 # -server -Xms${HEAP_SIZE}-Xmx${HEAP_SIZE}-XX:NewRatio2 -XX:SurvivorRatio8 # # G1 GC 配置 # -XX:UseG1GC -XX:MaxGCPauseMillis200 -XX:G1HeapRegionSize4m -XX:InitiatingHeapOccupancyPercent45 -XX:G1ReservePercent10 -XX:ConcGCThreads4 # # 元空间 # -XX:MetaspaceSize256m -XX:MaxMetaspaceSize512m # # GC 日志 # -Xlog:gc*:file${LOG_DIR}/gc.log:time,uptime,level,tags:filecount20,filesize100m # # OOM 处理 # -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath${LOG_DIR}/heapdump_%p_%t.hprof -XX:ExitOnOutOfMemoryError # # 性能优化 # -XX:UseStringDeduplication -XX:ParallelRefProcEnabled -XX:MaxTenuringThreshold10 # # 其他 # -Dfile.encodingUTF-8 -Duser.timezoneAsia/Shanghai -Djava.security.egdfile:/dev/./urandom # 启动脚本execjava$JAVA_OPTS-jar${APP_NAME}.jar2.3 备选配置ZGC极致低延迟# 如果 JDK 11且延迟要求 10msJAVA_OPTS_ZGC -server -Xms8g -Xmx8g -XX:UseZGC -XX:ConcGCThreads8 -XX:ZGenerational # JDK 21 分代 ZGC -Xlog:gc*:file${LOG_DIR}/gc.log:time,level,tags:filecount20,filesize100m -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath${LOG_DIR}/heapdump_%p_%t.hprof 三、场景二大数据处理系统吞吐量优先3.1 业务特征分析业务特点 - 吞吐量优先批处理、日志分析、数据清洗 - 运行时间长数小时到数天 - 对象生命周期长大量数据缓存在内存中 - 延迟不敏感秒级响应可接受 GC 目标 - 吞吐量 98% - 最大停顿 5s - Full GC 是可接受的清理时机3.2 推荐配置Parallel GC#!/bin/bash# 大数据处理系统 JVM 配置HEAP_SIZE16gLOG_DIR/var/log/batch-processorexportJAVA_OPTS # # 基础参数 # -server -Xms${HEAP_SIZE}-Xmx${HEAP_SIZE}# # Parallel GC吞吐量优先 # -XX:UseParallelGC -XX:UseParallelOldGC -XX:ParallelGCThreads16 -XX:ParallelGCThreads16 # 吞吐量目标GC 时间占比 5%即吞吐量 95% -XX:GCTimeRatio19 # 最大停顿时间JDK 9 支持 -XX:MaxGCPauseMillis5000 # # 年轻代配置 # -Xmn4g -XX:SurvivorRatio4 # # 元空间 # -XX:MetaspaceSize512m -XX:MaxMetaspaceSize1g # # GC 日志 # -Xlog:gc*:file${LOG_DIR}/gc.log:time,uptime,level:filecount10,filesize200m # # OOM 处理 # -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath${LOG_DIR}/heapdump_%p_%t.hprof 四、场景三微服务网关内存受限4.1 业务特征分析业务特点 - 容器化部署K8s 限制 1~2GB 内存 - 多实例部署每个实例资源有限 - 请求量大但单请求内存小 - 需要快速启动K8s 缩容/扩容频繁 GC 目标 - 内存利用率高不能预留太多 - 启动时间短 - 稳定运行不 OOM4.2 推荐配置容器 G1#!/bin/bash# 微服务网关 JVM 配置1.5GB 容器# 从容器 cgroup 读取内存限制CONTAINER_MEM_LIMIT$(cat/sys/fs/cgroup/memory/memory.limit_in_bytes2/dev/null||echo2147483648)CONTAINER_MEM_MB$((CONTAINER_MEM_LIMIT/1024/1024))# JVM 堆 容器内存 * 50%留一半给直接内存/元空间/栈/GC 开销HEAP_MB$((CONTAINER_MEM_MB/2))HEAP_SIZE${HEAP_MB}mLOG_DIR/var/log/serviceexportJAVA_OPTS # # 基础参数 # -server -Xms${HEAP_SIZE}-Xmx${HEAP_SIZE}-XX:NewRatio2 -XX:SurvivorRatio4 -XX:MaxTenuringThreshold15 # # G1 GC小堆优化 # -XX:UseG1GC -XX:MaxGCPauseMillis100 -XX:G1HeapRegionSize1m -XX:InitiatingHeapOccupancyPercent50 # # 元空间保守配置 # -XX:MetaspaceSize128m -XX:MaxMetaspaceSize256m # # 直接内存保守 # -XX:MaxDirectMemorySize256m # # GC 日志控制大小 # -Xlog:gc*:file${LOG_DIR}/gc.log:time,level,tags:filecount5,filesize20m # # OOM 处理 # -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath${LOG_DIR}/heapdump_%p_%t.hprof -XX:ExitOnOutOfMemoryError # # 快速启动优化 # -XX:TieredCompilation -XX:TieredStopAtLevel1 # # 预热内存 # -XX:AlwaysPreTouch 五、场景四长时运行后台任务稳定性优先5.1 业务特征分析业务特点 - 24x7 不间断运行 - 内存泄漏风险高需要长期监控 - 不能 OOM 重启影响业务 - 堆较大8GB GC 目标 - 稳定运行 30 天以上 - 内存使用曲线平稳 - 无内存泄漏5.2 推荐配置稳定性强化#!/bin/bash# 长时运行后台任务 JVM 配置HEAP_SIZE12gLOG_DIR/var/log/backend-serviceAPP_NAMEbackend-serviceexportJAVA_OPTS # # 基础参数 # -server -Xms${HEAP_SIZE}-Xmx${HEAP_SIZE}-XX:NewRatio2 -XX:SurvivorRatio6 # # G1 GC稳定性优先 # -XX:UseG1GC -XX:MaxGCPauseMillis500 -XX:G1HeapRegionSize8m -XX:InitiatingHeapOccupancyPercent60 -XX:G1ReservePercent15 # 减少 Mixed GC 频率稳定性优先 -XX:G1OldCSetRegionThresholdPercent10 -XX:G1HeapWastePercent10 # # 元空间 # -XX:MetaspaceSize512m -XX:MaxMetaspaceSize1g -XX:MetaspaceSize512m # # GC 日志详细 # -Xlog:gc*:file${LOG_DIR}/gc.log:time,uptime,level,tags:filecount30,filesize200m # 独立的引用日志 -Xlog:gcref*debug:file${LOG_DIR}/gc_ref.log:time,level # # OOM 处理详细 # -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath${LOG_DIR}/heapdump_%p_%t.hprof -XX:ExitOnOutOfMemoryError -XX:UnlockExperimentalVMOptions -XX:CrashOnOutOfMemoryError # # 稳定性强化 # -XX:AlwaysPreTouch -XX:ParallelRefProcEnabled -XX:MaxTenuringThreshold15 -XX:TargetSurvivorRatio90 # # 内存溢出前最后一次 Full GC # -XX:AlwaysPreTouch 六、监控告警阈值6.1 告警阈值建议# JVM 监控告警阈值Prometheus 规则示例groups:-name:jvm_alertsrules:# Old 区告警内存泄漏早期信号-alert:JvmOldGenUsageHighexpr:jvm_memory_used_bytes{areaold}/ jvm_memory_max_bytes{areaold}0.85for:5mlabels:severity:warningannotations:summary:Old Gen 使用率超过 85%# Full GC 告警-alert:JvmFullGcFrequentexpr:rate(jvm_gc_promotions_total[5m])0.1for:1mlabels:severity:criticalannotations:summary:对象晋升速率异常可能触发频繁 Full GC# GC 停顿告警-alert:JvmGcPauseHighexpr:jvm_gc_pause_seconds_sum{actionfull gc}/ jvm_gc_pause_seconds_count{actionfull gc}5for:5mlabels:severity:criticalannotations:summary:Full GC 平均停顿超过 5 秒总结生产环境 JVM 配置的核心是场景化低延迟场景用 ZGC/G1吞吐量场景用 Parallel大内存稳定性用 G1 并加强参数。黄金法则-Xms-Xmx、GC 日志必开、OOM 转储必开、容器感知要配。系列导航上一篇【JVM深度解析】第12篇JVM性能监控工具实战下一篇【JVM深度解析】第14篇JVM配置优化案例一Full GC频繁导致服务不可用系列目录JVM深度解析系列全集参考资料Netflix JVM Performance TuningAlibaba JVM CookbookBaeldung JVM Tuning GuideRed Hat JVM ConfigurationOracle Java SE Server VM Options