JVM GC 设置参数说明



针对上述分析报告,从JVM当前参数配置中找到了些原因,如下: 


-Xms768m -Xmx1280m  jvm堆的最小值和最大值设置,一般设成相同值,避免频繁分配堆空间


-XX:NewSize=128m -XX:MaxNewSize=128m  年轻代最小值和最大值设置(年轻代设定了,年老代也就定了),也可以用参数-XX:NewRatio=4,年老代和年轻代的大小比,这里128m有点小了,官方建议的是heap的3/8,差不多280m 


-XX:PermSize=96m -XX:MaxPermSize=128m 持久代最小值和最大值设置


-XX:MaxTenuringThreshold=0  经过多少次minor gc 后进入年老代,设置为0的话直接进入年老代,这是不太合理的,正常应该在年轻代多呆一段时间,真正需要到年老代的才转过去 


-XX:SurvivorRatio=20000  年轻代中eden和一块suvivor区的空间比例,这里设置成20000有问题,suvivor区空间几乎为0,一次minor gc后基本都转到年老代了,年轻代没有起到过滤左右 


-XX:+UseParNewGC  年轻代采用并行gc策略,JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值。使用多线程收集,提高吞吐量(-XX:ParallelGCThreads 并行收集器的线程数,此值最好配置与处理器数目相等,如果超过当前cpu数,会加大机器负载)


-XX:+UseConcMarkSweepGC  年老代采用并发gc策略,和应用程序并发执行,减少pause time,但是需要更大的堆区,因为并发执行,有碎片(-XX:+UseParallelOldGC 年老代垃圾收集方式为并行收集,这个是JAVA 6出现的参数选项)


 -XX:+CMSPermGenSweepingEnabled  为了避免Perm区满引起的full gc,建议开启CMS回收Perm区选项


 -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps  打印gc日志


 -XX:CMSInitiatingOccupancyFraction=1 年老代使用空间比达到这个值时开始cms gc,默认是在年老代占满68%的时候开始进行CMS收集,这里设置成1是不合理的,会导致CMS GC频繁发生,从gc日志里可以看出来,CMS GC和minor GC几乎一样多 


 -XX:+CMSIncrementalMode 启动i-CMS模式,增量模式,将cms gc过程分成6个阶段,其中阶段initial Mark和remark时需要pause,这6个阶段在两次minor gc的间隔期执行,具体执行起止时间由下面两个参数决定。拆分成小阶段增量执行时,可以避免应用被中断时间过长,极端情况是如果只有一个cpu,那么得等全部做完这6个阶段才能释放cpu,如果是多cpu这个模式开启与否应该影响不大。


-XX:CMSIncrementalDutyCycleMin=10 默认值10 启动CMS的下线


-XX:CMSIncrementalDutyCycle=30 默认值50 启动CMS的上线


-XX:+UseCMSCompactAtFullCollection  在FULL GC的时候, 对年老代的压缩。CMS是不会移动内存的, 因此这个非常容易产生碎片, 导致内存不够用, 因此, 内存的压缩这个时候就会被启用。 可能会影响性能,但是可以消除碎片,增加这个参数是个好习惯。


-XX:CMSFullGCsBeforeCompaction=0  上面配置开启的情况下,这里设置多少次Full GC后,对年老代进行压缩,这里设置成0不知道什么意思,可以根据线上full gc 的频率确定,频率高,这个值可以大点,比如5,反之频率低,这个值可以小点,比如1 


-XX:CMSMarkStackSize=8M 


-XX:CMSMarkStackSizeMax=32M 






jvm自带的监控工具参考网址:


1. http://docs.oracle.com/javase/6/docs/technotes/tools/share/jstat.html#output_options jstat 命令说明


2. http://docs.oracle.com/javase/1.5.0/docs/tooldocs/#manage JVM常用工具


3. http://my.oschina.net/u/994081/blog/112057 成为Java GC专家系列(3) — 如何优化Java垃圾回收机制 


4. http://www.importnew.com/2057.html 成为JavaGC专家Part II — 如何监控Java垃圾回收机制 

5. http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html#0.0.0.0.Adjusting%20Generation%20Sizes%7Coutline Tuning Garbage Collection with the 5.0 Java TM Virtual Machin  


你可能感兴趣的:(GC,垃圾回收)