java 虚拟机调优

新项目生产环境搭建好以后,把系统部署上去,观察jvm的日志。发现YGC和FGC非常频繁,期间尝试了几种参数的调整,最后确定下面所列的调整参数,现在比较稳定,还带长时间的观察。

 

1:64位机器可以突破内存3G的限制

2:Xmx和XmsMaxPermSize和MinPermSize设置一样大,这样可以减轻伸缩堆大小带来的压力

3:如果对响应时间要求比较高,是有CMS垃圾回收算法

4:对于像使用SSH,EOS之类的perm 区域设置大一些

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

6: 避免程序调用System.gc()。(rmi 内部使用的比较多,-XX:+DisableExplicitGC 强制关闭)

7:调大救援空间,避免old不足,引起full gc

-Xmx3072M  最大Heap(大小)Heap=young + old 不包含perm区域
-Xms3072M  最小Heap
-Xmn600M 年轻代代销
-XX:PermSize=500M  持久代初始大小
-XX:MaxPermSize=500M  持久代最大代销
-XX:+DisableExplicitGC 关闭System.gc()
-XX:SurvivorRatio=1 eden/survivor大小比例
-XX:+UseConcMarkSweepGC 启用并发垃圾收集(默认是并行),只对年老代有效
-XX:+UseParNewGC 年轻代使用必行收集
-XX:+CMSParallelRemarkEnabled 使用并行标记,极少标记暂停时间
-XX:+UseCMSCompactAtFullCollection 在FULL GC的时候,压缩内存,CMS是不会移动内存的,因此,这个非常容易产生碎片,导致内存不够用,因此,内存的压缩这个时候就会被启用
-XX:CMSFullGCsBeforeCompaction=0  指定多少次FULL GC以后才进行内存压缩
-XX:+CMSClassUnloadingEnabled
-XX:LargePageSizeInBytes=128M 内存页的大小, 不可设置过大, 会影响Perm的大小
-XX:+UseFastAccessorMethods 原始类型的快速优化
-XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=80 年老代区域大小多少(百分比)进行cms收集
-XX:SoftRefLRUPolicyMSPerMB=0
-XX:+PrintClassHistogram  下面四个参数打印日志
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintHeapAtGC
-Xloggc:/home/eos/logs/gc.log 日志存放位置

你可能感兴趣的:(java,虚拟机,cms,算法,ssh)