测试工程师如何了解Xmn参数的规范
今日在维护公布部署的项目内存的排查中发现,发现关于XMM的一项内容,暂时还不了解,先记录一下:
我给你一套**简单、直接、可落地**的 **Xmn(年轻代)规范标准**,照着用就能一次性把所有服务调对,不用再试错。
—
# 一、Xmn 规范核心原则(必须记住)
1. **Xmn 不能等于 Xmx**(绝对禁止,会直接崩)
2. **Xms = Xmx**(堆固定,避免伸缩)
3. **年轻代大小 = 堆的 1/3 ~ 1/2**
4. **不要写死固定值**,优先用 **-XX:NewRatio** 自动配比
5. **G1GC 不建议手动设 Xmn**,让 G1 自己管理
—
# 二、最推荐的规范配置(生产/SIT通用)
## 1. CMS / Parallel GC 用这个(最稳)
“`
-Xms1g -Xmx1g -XX:NewRatio=2
“`
– NewRatio=2 → **老年代:年轻代 = 2:1**
– 即:年轻代 = 堆的 **1/3**
## 2. 如果你一定要写死 Xmn(不推荐)
– 堆 512m → Xmn **128m~256m**
– 堆 1g → Xmn **256m~512m**
– 堆 2g → Xmn **512m~1g**
– 堆 4g → Xmn **1g~2g**
—
# 三、不同堆大小的标准模板(直接复制)
### ① 堆 512m(微服务/轻量)
“`
-Xms512m -Xmx512m -XX:NewRatio=2
“`
### ② 堆 1g(通用业务)
“`
-Xms1g -Xmx1g -XX:NewRatio=2
“`
### ③ 堆 2g(中型服务)
“`
-Xms2g -Xmx2g -XX:NewRatio=2
“`
### ④ 堆 4g(网关/大服务)
“`
-Xms4g -Xmx4g -XX:NewRatio=2
“`
—
# 四、G1GC 规范(最重要!你们要统一切 G1)
**G1 不要配置 Xmn!**
正确写法:
“`
-Xms1g -Xmx1g -XX:+UseG1GC
“`
G1 会自动调整年轻代,手动设 Xmn 反而毁性能。
—
# 五、你们环境里的错误案例修正
## 1. 致命错误(必须立刻改)
“`
# 错误
-Xms1g -Xmx1g -Xmn1g
# 正确
-Xms1g -Xmx1g -XX:NewRatio=2
“`
## 2. Xmn 太小(频繁 Minor GC)
“`
# 错误
-Xms2g -Xmx2g -Xmn256m
# 正确
-Xms2g -Xmx2g -XX:NewRatio=2
“`
—
# 六、最终落地规范(直接发给开发用)
1. **所有服务统一:Xms = Xmx**
2. **CMS 用 NewRatio=2,不写死 Xmn**
3. **G1 不配置 Xmn**
4. **禁止 Xmn = Xmx**
5. **年轻代保持在堆的 1/3 最佳**
—


