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大小,如果请求资源小于这个数值,则不会启用压缩。

原文地址:https://www.cnblogs.com/Alexr/p/13721341.html