简析jvm的性能调优

      堆的大小进行调整:jvm堆中主要的空间,就是以上新生代、老生代、永久代组成,整个堆大小=新生代大小 + 老生代大小 ;永久代大小其实是方法区的大小。

      在设置的时候,如果关注性能开销的话,应尽量把永久代的初始值与最大值设置为同一值,因为永久代的大小调整需要进行FullGC 才能实现。

      计算活跃数据大小

      活跃数据应该是基于应用程序稳定阶段时,观察长期存活与对象在java堆中占用的空间大小。

      计算活跃数据时应该确保以下条件发生:

       1)测试时,启动参数采用jvm默认参数,不人为设置。 

       2)确保Full GC 发生时,应用程序正处于稳定阶段。

       采用jvm默认参数启动,是为了观察应用程序在稳定阶段的所需要的内存使用。

       找到稳定阶段

       一定得需要产生足够的压力,找到应用程序和生产环境高峰符合状态类似的负荷,在此之后达到峰值之后,保持一个稳定的状态,才算是一个稳定阶段。

     在确定了应用出于稳定阶段的时候,要注意观察应用的GC日志,特别是Full GC 日志。

     GC日志指令: -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:<filename>

     必须得有FullGC 日志,如果没有的话,可以采用监控工具强制调用一次,或者采用以下命令,亦可以触发:jmap -histo:live pid

                                  简析jvm的性能调优

其他堆空间的分配,基于以下规则来进行。 

                                简析jvm的性能调优

基于以上规则和上图中的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