zoukankan      html  css  js  c++  java
  • Tomcat性能优化

    一、   Tomcat JVM 参数设置

    推荐JVM参数

    类型

    参数

    运行模式

    -sever,生产环境下建议开启服务器模式

    整个堆内存大小

    推荐将-Xms和-Xmx设置相同的值避免在每次GC 后调整堆的大小,sun官方文档建议最大不要超过可用物理内存的80%,经验值为物理内存的一半

    年轻代空间大小

    -XX:NewSize=256m –XX:MaxNewSize=256m

    永久代空间大小

    -XX:PermSize=256m -XX:MaxPermSize=256m
    这个参数一般不影响系统性能,该区域用于存放Class信息,如果出现PermGen space错,或者加载的class、jar比较多可以适当增加该值,一般设置为256已经足够

    GC日志

    -Xloggc:$CATALINA_BASE/logs/gc.log
    -XX:+PrintGCDetails
    -XX:+PrintGCDateStamps

    GC算法

    -XX:+UseParNewGC
    -XX:+CMSParallelRemarkEnabled
    -XX:+UseConcMarkSweepGC
    -XX:CMSInitiatingOccupancyFraction=75

    发生OOM时

    创建堆内存转储文件
    (JDK6以后才支持)

    -XX:+HeapDumpOnOutOfMemoryError

    -XX:HeapDumpPath=$CATALINA_BASE/logs

    Tomcat JVM 参数设置主要修改catalina.bat 或者 catalina.sh 文件中JAVA_OPTS变量。

    假设服务器的配置: 8 CPU8G内存,JDK1.6.x (该服务器仅作为Web应用服务器)

    JVM参数方案:

    -server -Xmx3550m -Xms3550m -Xmn1256m -Xss256k -XX:SurvivorRatio=6 -XX:PermSize=128m  -XX:MaxPermSize=256m -XX:ParallelGCThreads=8 -XX:LargePageSizeInBytes=128m -XX:MaxTenuringThreshold=0 -XX:+UseConcMarkSweepGC -XX:+UseFastAccessorMethods

    调优说明:

    -Xmx 与 -Xms 相同以避免JVM反复重新申请内存。-Xmx 的大小约等于系统内存大小的一半,即充分利用系统资源,又给予系统安全运行的空间。

    -Xmn1256m 设置年轻代大小为1256MB。此值对系统性能影响较大,Sun官方推荐配置年轻代大小为整个堆的3/8。(3/8 * 3350=1256.25)

    -Xss256k 设置较小的线程栈以支持创建更多的线程,支持大数据量、高并发访问,特别是程序中有递归行为的,并提升系统性能。

    -XX:SurvivorRatio=6 设置年轻代中Eden区与Survivor区的比值。系统默认是8,根据经验设置为6,则2个Survivor区与1个Eden区的比值为2:6,一个Survivor区占整个年轻代的1/8。

    -XX:ParallelGCThreads=8 配置并行收集器的线程数,即同时8个线程一起进行垃圾回收。此值一般配置为与CPU数目相等。

    -XX:LargePageSizeInBytes=128m 内存页的大小, 不可设置过大, 会影响Perm(永久代)的大小

    -XX:+UseFastAccessorMethods原始类型的快速优化

    -XX:MaxTenuringThreshold=0 设置垃圾最大年龄(在年轻代的存活次数)。如果设置为0的话,则年轻代对象不经过Survivor区直接进入年老代。在高并发环境下,其内存要么被缓存起来以减少直接访问DB,要么被快速回收以支持高并发请求,因此其内存对象在年轻代存活多次意义不大,可以直接进入老年代,根据实际应用效果,建议将此值设置为0。

    -XX:+UseConcMarkSweepGC 设置老年代为并发收集,尽量减少应用的暂停时间,减少Full GC发生的几率。

    二、   Tomcat 线程池设置

    tomcat线程池指定Web请求负载的数量,可以通过调整连接器属性“maxThreads”完成设置。maxThreads的值应该根据流量的大小,如果值过低,将有没有足够的线程来处理所有的请求,请求将进入等待状态,只有当一个的处理线程释放后才被处理;如果设置的太大,Tomcat的启动将花费更多时间。因此它取决于我们给maxThreads设置一个正确的值。和连接数相关的参数有:  

    1. minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10
    2. maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75
    3. acceptCount:允许的最大连接数,应大于等于maxProcessors,默认值为100
    4. enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false
    5. connectionTimeout:网络连接超时,单位:毫秒。通常可设置为30000毫秒。

    其中和最大连接数相关的参数为maxProcessors和acceptCount。如果要加大并发连接数,应同时加大这两个参数。

     <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
                    maxHttpHeaderSize="8192"
                    minProcessors="100"
                    maxProcessors="5000"
                    maxThreads="5000"
                    minSpareThreads="1000"
                    maxSpareThreads="4000"
                    enableLookups="false"
                    acceptCount="5000"
                    disableUploadTimeout="true"
                    connectionTimeout="20000"
                    debug="0"
                    redirectPort="8443" />
    

      

    三、   GZIP压缩

    在server.xml配置文件中设置压缩的选项:

    使用gzip对HTML、CSS、JS、JSON等文件进行压缩,通常可以节省大约50%-70%的大小,这样可以提高页面的请求时间和响应速度。

    <Connector executor=" tomcatThreadPool" port="8080" //开启线程池 
        protocol="org.apache.coyote.http11. Http11AprProtocol" //开启Apr协议,需要安装Apr支持 
        compression=“on"
    
        noCompressionUserAgents="gozilla,traviata" 
    
        compressionMinSize=“4096”   
    
        compressableMimeType=“text/html,text/xml,text/javascript,text/css,text/plain,text/javascript,text/json, application/json,application/x-javascript ,application/javascript ”
    
        redirectPort="8443"  />
    

      

    备注:如果发现内容没有被压缩,可以考虑调整compressionMinSize大小,如果请求资源小于这个数值,则不会启用压缩。

  • 相关阅读:
    我的程序员之路(6)——离职
    oracle手记(二)
    关于抽象类和接口
    Oracle学习手记
    DHTML
    XmlDocument,XmlNode,XmlElement创建复杂XML文档
    一首诗
    PC端口知识(转)
    sharpPDF.NET生成PDF文件
    Socket接口原理及C#实现
  • 原文地址:https://www.cnblogs.com/Alexr/p/13721341.html
Copyright © 2011-2022 走看看