单机几十万并发 JVM 如何优化¶
一、挑战¶
- QPS 几十万。
- 延迟要求低。
- GC 不能频繁。
二、堆大小¶
- 不要太大(Full GC 长)。
- 4-8G 合适。
- Xms = Xmx,避免动态扩缩。
三、收集器¶
- G1:停顿可控。
- ZGC:超大堆、超低延迟(< 10ms)。
四、线程栈¶
- 栈大小 -Xss 1M 默认,不要太大。
- 线程数不能太多(栈内存限制)。
五、GC 优化¶
- 年轻代足够大,避免短对象进老年代。
- 大对象直接进老年代的阈值调大。
- 避免大对象分配。
六、代码层面¶
- 减少临时对象(复用、对象池)。
- 避免大 List/Map 长期存活。
- 软引用/弱引用做缓存。
七、直接内存¶
NIO 用堆外内存,减少堆压力:
八、监控¶
- GC 日志。
- Prometheus + Grafana。
- Arthas 在线诊断。
九、参数示例¶
核心
减少对象创建,让 G1 跑得稳。