tomcat性能优化参数

一. jvm参数优化(catalina.sh中java_opts选项)

    1. 初始堆、最大堆大小(xms  xmx),初始大小跟最大的大小设置为一样的,好处是减少新生代的GC频率

    2. 线程的栈大小(xss),jdk1.5之后默认1M,可以根据配置设置成256k

    3. 永久代大小(-XX:PermSize,-XX:MaxPermSize)

    4. 年轻代初始空间,最大空间(-Xmn),  年轻代大小(-XX:NewSize),从永久代的参数设置来看他不属于堆的部分

    5. 进入老年代的最大年龄(MaxTenuringThreshold),如果系统中对象普遍存活周期长,可以设置为0,不进入新生代,直接进入老年代

    5.1 最大垃圾回收暂停(-XX:MaxGCPauseMillis)

        垃圾回收时间与非垃圾回收时间的比值( -XX:GCTimeRatio)

    6. 串行回收器(-XX:+UseSerialGC)

    7. parallel 回收方式

    a.特性描述

    会集中回收,引发时间比较长的停顿,所以在追求用户高应的场景下并不适合,另外因为大部分时间不会引发停顿,系统的整体吞吐量还是比较大的,

    适用于吞吐量要求比较高的场景,例如JOB  

    b. 配置

   新生代一般用Parallel并行方式

        -XX:+UseParallelGC         并行GC

   -XX:ParallelGCThreads    并行的线程数(一般跟cpu的物理核心数一致)

    -XX:+UseParNewGC         新生代用并行GC

        -XX:+UseParallelOldGC    老年代用并行GC

    8. cms 回收方式

    a.特性描述

          并发标记清除,标记过程持续的周期长,会引发断断续续的短暂的停顿,比起parallel方式,更适合响应要求高的场景。

       -XX:+UseConcMarkSweepGC  并发GC (标记删除,并发标记,并发清除)

   对于老年代,采用的是标记清除,他会引起内存碎片,因为清除之后的空间在利用方面不完整,不是那种连续的整块的内存空间,所以要采用压缩算法

       -XX:+UseCMSCompactAtFullCollection  (并发收集器开启后,最好启用压缩算法)

       -XX:CMSFullGCsBeforeCompaction=0   (多少fullGC后进行压缩)

    9.yong GC ,full GC

       yong GC,针对新生代的GC,也称为minor GC,采用诸如 serial GC,Parrallel GC,本质是一样的,当eden区满了的时候会触发minor GC,把eden区中存活的对象复制到活跃s区, 

       如果eden区又满了,则会把eden区和活跃s区的存活对象复制到空闲s区,把空闲S区置为活跃S区,老的活跃S区置为空闲S区,

       有些对象,在S区中经历了例如15次GC,则会放入老年代,有些对象比较大,eden区放不下,直接放入老年代。

       major GC,或者称为 full GC,就是指老年代的GC,是比较大的GC。

   10.GC 算法的比较

       根搜索算法:这个算法用来判断对象是否存活的,是垃圾回收的辅助算法,从GC root开始遍历,如果对象可达,说明存活,未可达,说明没有引用,

       应该被回收。

       复制算法:新生代常用的算法,采用两个区的思想,将活跃区的存活对象复制到空闲区,将空闲区置为活跃区,老的活跃区则清理掉所有对象,并且置为

       空闲区。复制算法适合存活率低的对象,这样复制的时间减少,因为不存在内存碎片整理的问题,效率相对高效,适合频繁执行,如果存活率高的对象,

       复制算法效率很比较低。

       标记清除:遍历GC root,如果对象可达则标记为1,不可达则标记为0,表示要清除的,问题是清除之后内存是分散的,有不少碎片。

        现实场景下对应CMS。这种方式适合稳定存活的老年代

       标记整理:基于标记清除再加上一个整理算法,所以效率相对比较低,现实场景下是在CMS的基础上,开启压缩,并且在可以设置在fullGC几次后

         进行压缩。

        

       

 

  线上配置案例:

  

对tomcat jvm参数做了定制化
主要包括采用CMS,并行GC,压缩等等

					export JAVA_OPTS="-server -XX:+AggressiveOpts -XX:+DoEscapeAnalysis \    //启用server模式           
					-Xmx2500m \   //最大堆 2.5G                           
					-Xms2500m \    //初始堆 2.5G
					-Xmn512m \     //新生代 512M
					-Xss512K \     //线程的栈大小  512K
					-XX:PermSize=128M \   //永久代 128M
					-XX:MaxPermSize=256M \  //最大永久代 256M
					-XX:SurvivorRatio=8 \   //eden区跟s的比例
					-XX:+UseCompressedOops \  //启用压缩算法
					-XX:+UseParNewGC \        //新生代使用并行收集器
					-XX:+UseConcMarkSweepGC \  //老年代使用并发标记清除法
					-XX:+CMSClassUnloadingEnabled \ //
					-XX:+UseCMSCompactAtFullCollection \  //在full gc的时候启用压缩
					-XX:CMSFullGCsBeforeCompaction=0 \  //多少次 full gc后进行压缩
					-XX:+CMSParallelRemarkEnabled \  //并行的标记
					-XX:+DisableExplicitGC \    
					-XX:+UseCMSInitiatingOccupancyOnly \
					-XX:CMSInitiatingOccupancyFraction=75 \
					-XX:SoftRefLRUPolicyMSPerMB=0 \

  

 对Connector参数做了少量定制化调优,如最大线程数、maxhttpheader大小等等

   <Connector port="8080" protocol="HTTP/1.1"   
                socketBuffer="9000"    
                enableLookups="false"   //关闭掉DNS
                tcpNoDelay="true"       
                minSpareThreads="20"    //空闲线程数
                maxThreads="1024"       //最大线程数 
                connectionTimeout="5000"
                maxHttpHeaderSize="32768"
                acceptCount="150"      //最大排队数
                redirectPort="8443" />

  

 

 

参考文章:  http://blog.csdn.net/xrt95050/article/details/7326179

 

       

       

posted on 2016-07-16 09:38  豆沙包没有肉  阅读(177)  评论(0编辑  收藏  举报

导航