如何合理的规划JVM性能调优
一定得需要产生足够的压力,找到应用程序和生产环境高峰符合状态类似的负荷,在此之后达到峰值之后,保持一个稳定的状态,,才算是一个稳定阶段。所以要达到稳定阶段,压力测试是必不可少的,具体如何如何对应用压力测试,本篇不过多说明,后期会有专门介绍的篇幅。 在确定了应用出于稳定阶段的时候,要注意观察应用的GC日志,特别是Full GC 日志。 GC日志指令: -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc: GC日志是收集调优所需信息的最好途径,即便是在生产环境,也可以开启GC日志来定位问题,开启GC日志对性能的影响极小,却可以提供丰富数据。 必须得有FullGC 日志,如果没有的话,可以采用监控工具强制调用一次,或者采用以下命令,亦可以触发
在稳定阶段触发了FullGC我们一般会拿到如下信息: 从以上gc日志中,我们大概可以分析到,在发生fullGC之时,整个应用的堆占用以及GC时间,当然了,为了更加精确,应该多收集几次,获取一个平均值。或者是采用耗时最长的一次FullGC来进行估算。 在上图中,fullGC之后,老年代空间占用在93168kb(约93MB),我们以此定为老年代空间的活跃数据。 其他堆空间的分配,基于以下规则来进行。 基于以上规则和上图中的FullGC信息,我们现在可以规划的该应用堆空间为: java 堆空间: 373Mb (=老年代空间93168kb*4) 新生代空间:140Mb(=老年代空间93168kb*1.5) 永久代空间:5Mb(=永久代空间3135kb*1.5) 老年代空间: 233Mb=堆空间-新生代看空间=373Mb-140Mb 对应的应用启动参数应该为: java -Xms373m -Xmx373m -Xmn140m -XX:PermSize=5m -XX:MaxPermSize=5m 四、延迟调优 在确定了应用程序的活跃数据大小之后,我们需要再进行延迟性调优,因为对于此时堆内存大小,延迟性需求无法达到应用的需要,需要基于应用的情况来进行调试。 在这一步进行期间,我们可能会再次优化堆大小的配置,评估GC的持续时间和频率、以及是否需要切换到不同的垃圾收集器上。 1、系统延迟需求 在调优之前,我们需要知道系统的延迟需求是那些,以及对应的延迟可调优指标是那些。 应用程序可接受的平均停滞时间: 此时间与测量的Minor GC持续时间进行比较。 可接受的Minor GC频率:Minor GC的频率与可容忍的值进行比较。 可接受的最大停顿时间: 最大停顿时间与最差情况下FullGC的持续时间进行比较。 可接受的最大停顿发生的频率:基本就是FullGC的频率。 以上中,平均停滞时间和最大停顿时间,对用户体验最为重要,可以多关注。 基于以上的要求,我们需要统计以下数据: MinorGC的持续时间; 统计MinorGC的次数; FullGC的最差持续时间; 最差情况下,FullGC的频率; 2、优化新生代的大小 比如如上的gc日志中,我们可以看到Minor GC的平均持续时间=0.069秒,MinorGC 的频率为0.389秒一次。 如果,我们系统的设置的平均停滞时间为50ms,当前的69ms明显是太长了,就需要调整。 我们知道新生代空间越大,Minor GC的GC时间越长,频率越低。 如果想减少其持续时长,就需要减少其空间大小。 如果想减小其频率,就需要加大其空间大小。 为了降低改变新生代的大小对其他区域的最小影响。在改变新生代空间大小的时候,尽量保持老年代空间的大小。 比如此次减少了新生代空间10%的大小,应该保持老年代和持代的大小不变化,第一步调优后的参数如下变化: java -Xms359m -Xmx359m -Xmn126m -XX:PermSize=5m -XX:MaxPermSize=5m新生代的大小有140m变为126,堆大小顺应变化,此时老年代是没有变化的。 3、优化老年代的大小 同上一步一样,在优化之前,也需要采集gc日志的数据。此次我们关注的是FullGC的持续时间和频率。 上图中,我们可以看到 FullGC 平均频率 =5.8sFullGC 平均持续时间=0.14s(以上为了测试,真实项目的fullGC 没有这么快) 如果没有FullGC的日志,有办法可以评估么? 我们可以通过对象提升率进行计算。 对象提升率 比如上述中启动参数中,我们的老年代大小=233Mb。 那么需要多久才能填满老年代中这233Mb的空闲空间取决于新生代到老年代的提升率。 每次提升老年代占用量=每次MinorGC 之后 java堆占用情况 减去 MinorGC后新生代的空间占用 对象提升率=平均值(每次提升老年代占用量) 除以 老年代空间 有了对象提升率,我们就可以算出填充满老年代空间需要多少次minorGC,大概一次fullGC的时间就可以计算出来了。 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |