JVM调优实战
JVM实战调优
jvm不会开启记录GC日志,会影响性能,调优之后,就会关掉GC日志
JVM调优主要就是调整下面两个指标 减少FGC执行次数,减少FGC执行时间
停顿时间:垃圾收集器做垃圾回收中断应用执行的时间。-XX:MaxGCPauseMillis
吞吐量:垃圾收集的时间和总时间的占比:1/(1+n),吞吐量为1-1/(1+n)。-XX:GCTimeRatio=n
GC调优步骤:
1.打印GC日志
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps(在GC日志里面打印出详细时间戳) -XX:+PrintGCDateStamps -Xloggc:./gc.log
打印GC日志输出到文件内
Tomcat 则直接加在JAVA_OPTS变量里
分析日志得到关键性指标
分析GC原因,调优JVM参数
1.Parallel Scavenge收集器
分析日志
第一次调优:设置Metaspace大小,增大元空间大小-XX:MetaspaceSize=64M -XX:MaxMetaspaceSize=64M (gceasy推荐调整,元空间大小可以设置的大一些)
第二次调优:增大年轻代动态扩容增量,默认是20%,可以减少young gc:-XX:YoungGenerationSizeIncrement=30
2.配置CMS收集器
-XX:+UseConcMarkSweepGC
3.配置G1收集器
-XX:+UseG1GC
-XX:InitiatingHeapOccupancyPercen:老年代占用空间超过整堆比IHOP阈值(默认45%),超过则执行混合收集
调优:添加吞吐量和停顿时间参数:-XX:GCTimeRatio=99 -XX:MaxGCPauseMillis=10
使用https://gceasy.io/上传gc日志,该网站会分析日志文件,给出调优建议
GC常用参数
堆栈设置
-Xss:每个线程的栈大小
-Xms:初始堆大小,默认物理内存的1/64
-Xmx:最大堆大小,默认物理内存的1/4
-Xmn:新生代大小
-XX:NewSize:设置新生代初始大小
-XX:NewRatio:默认2表示新生代占老年代的1/2,占整个堆内存的1/3
并行收集器设置:
-XX:YoungGenerationSizeIncrement:年轻代gc后扩容比例,默认是20(%)