JVM调优之优化延迟

调优延迟/响应性

评估垃圾收集器对延迟性影响的过程中将进行下面的活动:

  1、测量Minor GC的持续时间

  2、统计Minor GC的次数

  3、测量Full GC的最差(最长)的持续时间

  4、统计最差情况下,Full GC的频率

可能采取的活动包括:

  1、堆分析,修改应用程序,减少对象分配及对象

  2、改变JVM的部署模式,减少单个JVM负荷

优化新生代的大小

Minor GC 频率少,间隔时间长,修正的方法是减少新生代空间

     频率高,修正的方法就是增加新生代空间

       调整过程中,尽量保持年老代空间大小恒定

调整新生代的几个原则

  1、老年代空间大小不应该小于活跃数据大小的1.5倍

  2、新生代空间至少应为java堆大小的10%,通过-Xmx和-Xms可以设定改值

  3、增大Java堆大小时,注意不要超过JVM可用的物理内存数

调整新生代也无法满足系统延迟则可以修改应用程序或者改变JVM的部署模式

 

如果仅仅通过监控Minor GC就能达到应用程序的延迟性要求,就可以直接进入到年老代空间的调整

优化老年代的大小

Full GC持续时间计算方法

  1、可以直接通过每次Full GC的间隔获得

  2、如果没有发生Full GC,可以通过多次Minor GC计算获得,根据每次Minor GC后,老年代提升的空间计算出每秒老年代提升的空间。再由老年代的总空间/老年代每秒提升的空间可以得到。

Survivor空间的大小可以通过 -xx:survivorRtio=<ratio> 表示单个survivor空间与Eden空间的大小的比率

survivor空间的大小=-Xmn<value>/(-xx:SurvivorRatio=<ratio>+2)

减少survivor的比率会增大Survivor空间,同时减少Eden空间,会导致更频繁的MinorGC。垃圾收集的频率越高,对象老化的速度越快

 

晋升阙值可通过-xx:maxTenuringThreshold=<n>

  指定对象的年龄通过<n>值将其提升到年老代空间

  内部计算出的晋升阙值不会超过最大晋升阙值

设定的值是CMS垃圾收集周期在年老代空间占用达到多少百分比时启用:-xx:CMSInititiatingOccupancyFraction=65

最好配合-xx:CMSInitiatingOccupanyOnly=<percent>同时使用

设定的值应该大于老年代占用空间和活跃数据的大小之比

例如

-Xmx1536m -Xms 1536m -Xmn 512m

-xx:CMSInitiatingOccupancyFraction=51

-xx:+useCMSInitiatingOccupancyOnly

永久代启动CMS  -xx:CMSInitiatingPermOccupanyFraction=<percent>

-xx:+useCMSInitiatingOccupanyOnly

-xx:parallelGCthreads=<n> 重新标记的线程数

 

 

 

 

  

 

posted @ 2016-07-22 15:21  TingJie  阅读(577)  评论(0编辑  收藏  举报