跳转至

单机几十万并发 JVM 如何优化

一、挑战

  • QPS 几十万。
  • 延迟要求低。
  • GC 不能频繁。

二、堆大小

  • 不要太大(Full GC 长)。
  • 4-8G 合适。
  • Xms = Xmx,避免动态扩缩。

三、收集器

  • G1:停顿可控。
  • ZGC:超大堆、超低延迟(< 10ms)。

四、线程栈

  • 栈大小 -Xss 1M 默认,不要太大。
  • 线程数不能太多(栈内存限制)。

五、GC 优化

  • 年轻代足够大,避免短对象进老年代。
  • 大对象直接进老年代的阈值调大。
  • 避免大对象分配。

六、代码层面

  • 减少临时对象(复用、对象池)。
  • 避免大 List/Map 长期存活。
  • 软引用/弱引用做缓存。

七、直接内存

NIO 用堆外内存,减少堆压力:

-XX:MaxDirectMemorySize=2g

八、监控

  • GC 日志。
  • Prometheus + Grafana。
  • Arthas 在线诊断。

九、参数示例

-Xms4g -Xmx4g
-XX:+UseG1GC
-XX:MaxGCPauseMillis=100
-XX:ParallelGCThreads=8
-Xss512k

核心

减少对象创建,让 G1 跑得稳。