JVM调优主要调整两个指标:
- 停顿时间:垃圾回收器gc中断应用执行的时间。 -XX:MaxGCPauseMillis
- 吞吐量:垃圾收集的时间和总时间的占比:1/(1+n),吞吐量为1-1/(1+n)。 -XX:GCTimeRatio=n
垃圾回收器选择:
- 优先调整堆大小让服务器自己选择
- 如果内存小于100m,使用串行收集器
- 如果是单核,并且没有时间停顿要求,选择串行或者JVM自己选择
- 如果允许停顿时间超过1秒,选择并行或者JVM自己选择
- 如果相应时间最重要,并且不能超过1秒,使用并发收集器
- 如果机器配置高,官方推荐G1,性能高
调优步骤
- 打印分析GC日志
- 参数:-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:./gc.log
- 分析日志里面的关键性指标:吞吐量、最大停顿、平均停顿、YoungGC次数、FullGC次数
- 分析GC原因,调优JVM参数
GC常用参数
- -Xss:每个线程的栈大小
- -Xms:初始堆大小,默认物流内存的1/64
- -Xmx:最大堆大小,默认物理内存的1/4
- -Xmn:新生代大小
- -XX:NewSize:新生代初始大小
- -XX:NewRatio:默认2,表示新生代占老年代的1/2,占整个内存的1/3
- -XX:SurvivorRatio:默认8,表示一个survivor区占用1/8的Eden内存,1/10的新生代内存
- -XX:MetaspaceSize:设置元空间大小
- -XX:MaxMetaspaceSize:设置元空间最大允许大小,默认不受限制,JVM Metaspace会进行动态扩展