§2.1.4 JVM调优常用参数
考察意图:能否根据实际场景选择合适的JVM参数,而非无脑复制粘贴。
回答样板:
基础内存参数:
| 参数 | 含义 | 常见设置 |
|---|---|---|
-Xms / -Xmx | 初始/最大堆大小 | 建议设为相同值,避免堆动态扩缩带来的GC抖动。4G服务通常 -Xms4g -Xmx4g |
-Xss | 线程栈大小 | 默认1MB。线程数多且调用栈浅可缩小(512k),递归深可加大 |
-XX:NewRatio | 老年代:新生代比例 | 默认2(Old=堆的2/3,Young=1/3)。高并发短命对象可调为1 |
-XX:SurvivorRatio | Eden:Survivor比例 | 默认8(Eden:S0:S1=8:1:1)。大多数场景不需改 |
-XX:MaxTenuringThreshold | 晋升老年代年龄阈值 | 默认15(CMS默认6)。值小则对象快速晋升但可能过早填满老年代 |
-XX:MetaspaceSize / -XX:MaxMetaspaceSize | 元空间初始/最大大小 | 默认无上限(受物理内存限制)。动态生成类多的场景建议设上限防泄漏。典型256m-512m |
GC日志参数:
| |
OOM排查必开:
| 参数 | 作用 |
|---|---|
-XX:+HeapDumpOnOutOfMemoryError | OOM时自动dump堆快照,生产环境必须开 |
-XX:HeapDumpPath=/path/to/dumps | dump文件路径,防止撑爆根目录 |
-XX:OnOutOfMemoryError="kill -9 %p" | OOM时执行自定义命令(注意安全隐患) |
G1调优参数:
| 参数 | 含义 | 建议 |
|---|---|---|
-XX:MaxGCPauseMillis | 期望最大停顿时间 | 默认200ms,不要设太低(比如10ms)——G1达不到会疯狂GC反而性能下降。服务端通常50-200ms |
-XX:G1HeapRegionSize | Region大小 | 默认堆/2048,取值1/2/4/8/16/32M。大对象多可调大 |
-XX:ConcGCThreads | 并发GC线程数 | 默认≈CPU核数的1/4。CPU资源紧张时减半 |
-XX:InitiatingHeapOccupancyPercent | 触发并发标记的堆占用阈值 | 默认45%。堆占用达此值触发并发标记周期。值设太低频繁GC浪费CPU,太高预留不够触发Full GC |
真实配置示例——安全生产平台(JDK 8, 4核8G):
| |
陷阱提示:把线上配置直接复制粘贴但说不清每个参数的业务取舍原因;设 MaxGCPauseMillis=10显得不专业;不知道生产环境必须开HeapDumpOnOutOfMemoryError。