JVM

JVM调优总结

JVM调优知识

Posted by ZBX on July 22, 2020

常见配置汇总

典型设置

-Xms:初始堆大小 
-Xmx:最大堆大小 
-Xmn:年轻代大小
-Xss:每个线程的堆栈大小
-XX:NewSize=n:设置年轻代大小 
-XX:NewRatio=n:设置年轻代和年老代的比值.如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4 
-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值.注意Survivor区有两个.如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5 
-XX:MaxPermSize=n:设置永久代大小 // 1.8之后是设置元空间
-XX:MAXTenuringThreshold =0 : 设置垃圾最大年龄,设置为0的话,则年轻代对象不经过Survivor区,直接进入老年代
-xx:metaspaceSize	元数据空间大小

回收器选择

-XX:+UseParallelGC : 选择垃圾收集器为并行收集器,此配置竞对年轻代有效,及上述配置下,年轻代使用并发手机
-XX:ParallelGCThreads=20:配置并行收集器的线程数
-XX:+UseParallelOldGC:配置年老代垃圾收集方式为并行收集
-XX:MaxGCPauseMillis=100:设置每次年轻代垃圾回收的最长时间
-XX:+UseAdaptiveSizePolicy:设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例
-XX:+UseConcMarkSweepGC:设置年老代为并发收集

## CMS  一个响应时间优先的垃圾收集器
-XX:+UseConcMarkSweepGC	新生代使用并行收集器,老年代使用CMS+串行收集器
-XX:+UseParNewGC	新生代使用并行收集器,老年代CMS收集器默认开启
-XX:CMSInitiatingOccupanyFraction	设置触发GC的阈值,默认68%,如果内存预留空间不够,就会引起concurrent mode failure
-XX:+UseCMSCompactAtFullCollection	Full GC后,进行一次整理,整理过程是独占的,会引起停顿时间变长
-XX:+CMSFullGCsBeforeCompaction	设置进行几次Full GC后进行一次碎片整理
-XX:+CMSClassUnloadingEnabled	允许对类元数据进行回收
-XX:+UseCMSInitiatingOccupanyOnly	表示只在达到阈值的时候才进行CMS回收
-XX:+CMSIncrementalMode	使用增量模式,比较适合单CPU

## G1 (G1是兼顾吞吐量和响应时间的收集器)
-XX:G1HeapRegionSize	设置Region大小,默认heap/2000
-XX:G1MixedGCLiveThresholdPercent	老年代依靠Mixed GC, 触发阈值
-XX:G1OldSetRegionThresholdPercent	定多包含在一次Mixed GC中的Region比例
-XX:+ClassUnloadingWithConcurrentMark	G1增加默认开启,在并发标记阶段结束后,JVM即进行类型卸载
-XX:G1NewSizePercent	新生代的最小比例
-XX:G1MaxNewSizePercent	新生代的最大比列
-XX:G1MixedGCCountTraget	Mixed GC数量控制

辅助信息

-XX:PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCApplicationConcurrentTime:打印每次垃圾回收前,程序未中断的执行时间
-XX:+PrintGCApplicationStoppedTime:打印垃圾回收期间程序暂停的时间
-XX:PrintHeapAtGC:打印GC前后的详细堆栈信息
-Xloggc:filename 把日志信息记录到文件以便分析
-XX:OnOutOfMemoryError	当发生OOM时执行用户指定的命令
-XX:+HeapDumpPath	OOM时堆导出的路径
-XX:+TraceClassLoading	跟踪类加载信息

GC调优

通常关注两个指标:响应性,吞吐量。通常考虑堆大小和垃圾收集器的调整。

思路

  1. 分析场景,如:启动速度慢,偶尔出现响应慢于平均水平或出现卡顿
  2. 确定目标,如:内存占用,低延时,吞吐量
  3. 收集日志,如:通过参数配置收集GC日志,通过JDK工具查看GC状态
  4. 分析日志,如:使用工具辅助分析日志,查看GC次数,GC时间
  5. 调整参数,如:切换垃圾收集器或者挑战垃圾收集器参数