zoukankan      html  css  js  c++  java
  • 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

           

           

  • 相关阅读:
    Django
    Django
    Django
    6.1
    Django
    Django
    Django
    Django
    Django简介
    web应用/http协议/web框架
  • 原文地址:https://www.cnblogs.com/wuMing-dj/p/5675387.html
Copyright © 2011-2022 走看看