图灵学院 jvm性能调优的流程是怎么样的呢?
调优的最终目的都是为了令应用程序使用最小的硬件消耗来承载更大的吞吐。
jvm的调整也不例外。Jvm调整主要旨在优化垃圾收集器的收集性能,以便在虚拟机上运行的应用程序可以使用更少的内存并获得更大的延迟吞吐量。当然,这里最少是最好的选择,而不是越少越好。
性能定义
要查找和评估器性能瓶颈,首先要知道性能定义,对于jvm调优来说,我们需要知道以下三个定义属性,依作为评估基础:
吞吐量:重要指标之一,是指不考虑垃圾收集引起的停顿时间或内存消耗,垃圾收集器能支撑应用达到的最高性能指标。
延迟:度量标准是缩短由垃圾收集引起的暂停时间,或完全消除由垃圾收集引起的暂停,以避免在应用程序运行时发生抖动。
内存占用:垃圾收集器流畅运行所需要的内存数量。
这三个属性中,任何一个属性的性能改进几乎总是以损失其他两个属性的性能为代价,并且不能同时实现。特定属性或两个属性的性能对应用程序更重要,并且应基于业务需要确定的应用程序。
性能调优原则
在调优过程中,我们应该谨记以下3个原则,以便帮助我们更轻松的完成垃圾收集的调优,从而达到应用程序的性能要求。
1.MinorGC回收原则:每次minorGC都要尽可能多的收集垃圾对象。以减少应用程序发生FullGC的频率。
2.GC内存最大化原则:处理吞吐量和延迟问题时候,垃圾处理器能使用的内存越大,垃圾收集的效果越好,应用程序也会越来越流畅。
3.GC调优3选2原则:在性能属性里面,吞吐量、延迟、内存占用,我们只能选择其中两个进行调优,不可三者兼得。
性能调优流程
以上就是对应用程序进行jvm调优的基本流程,我们可以看到,jvm调优是根据性能测试结果不断优化配置而多次迭代的过程。在达到每一个系统需求指标之前,之前的每个步骤都有可能经历多次迭代。有时候为了达到某一方面的指标,有可能需要对之前的参数进行多次调整,进而需要把之前的所有步骤重新测试一遍。
另外调优一般是从满足程序的内存使用需求开始的,之后是时间延迟的要求,最后才是吞吐量的要求,要基于这个步骤来不断优化,每一个步骤都是进行下一步的基础,不可逆行之。以下我们针对每个步骤进行详细的示例讲解。
在JVM的运行模式方面,我们直接选择server模式,这也是jdk1.6以后官方推荐的模式。
在垃圾收集器方面,我们直接采用了jdk1.6-1.8中默认的parallel收集器(新生代采用parallelGC,老生代采用parallelOldGC)。