JVM常见参数调优实战指南
请给出一个典型的Java服务端应用(如Spring Boot微服务)的JVM参数优化配置示例,并解释每个参数的含义。
回答
我还是少年
典型JVM参数配置(4C8G服务器):
-Xms4g -Xmx4g # 堆初始和最大4G(避免动态扩容)
-Xmn2g # 新生代2G
-XX:MetaspaceSize=256m # 元空间触发GC阈值
-XX:MaxMetaspaceSize=256m # 元空间最大值
-Xss512k # 线程栈512KB
-XX:+UseG1GC # 使用G1收集器
-XX:MaxGCPauseMillis=200 # 目标最大GC停顿200ms
-XX:ParallelGCThreads=4 # 并行GC线程数
-XX:ConcGCThreads=2 # 并发GC线程数
-XX:InitiatingHeapOccupancyPercent=45 # 触发并发标记的堆占用
-XX:G1HeapRegionSize=4m # G1 Region大小
-XX:+HeapDumpOnOutOfMemoryError # OOM时自动dump
-XX:HeapDumpPath=/var/log/heapdump.hprof
-Xloggc:/var/log/gc.log # GC日志
-XX:+DisableExplicitGC # 禁用System.gc()
调优思路:
- -Xms=-Xmx避免扩容开销。
- 根据响应时间要求选择GC(G1/CMS/Parallel)。
- 先保证堆大小满足业务需求,再调整GC参数。
- 压测后分析GC日志(使用GCeasy/GCEasy在线分析)。
- 关注:GC频率、STW时间、晋升大小、Region回收情况。