tomcat之性能优化

  tomcat是咱们经常使用的web容器,它的性能高低直接影响到应用对外提供服务的能力和用户的体验,因此tomcat的优化相当重要。对于单台tomcat服务器而言,优化主要是两方面:内存优化和配置优化(例如,链接数,线程池,iO等),固然还有使用tomcat原生库。除了这些tomcat自己固有配置优化,还有一些减小占用tomcat链接时间的配置,好比数据压缩。若是单个服务器通过优化后依然没法知足,性能要求,这时服务器集群就是必须的手段了,下面针对这些方面的优化详细介绍。javascript

tomcat用户配置css

  优化配置以前,咱们须要配置一个tomcat管理员帐户,来登陆查看Tomcat控制台提升的各类参数。在conf/ tomcat-users.xml下添加用户:html

<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>

  启动tomcat,登陆查看信息:http://127.0.0.1:8080/:java

    

 

    

 

内存优化linux

  主要是针对jvm各个内存大小的分配进行优化,以提升内存的使用率和减小资源变化带来的时间消耗。有关文件:catalina.sh(linux下)或者catalina.bat(window下)。程序员

  注意:对于32位操做系统上对jvm的内存有不能超过2G的限制,可是64位系统上没有这个限制。但不少状况下32操做系统上jvm的最大使用内存是不到2G的,2G只是个理想值,根据服务器的配置不一样,可能有些只能用1500M或者1700M。具体支持多少,能够在控制台输入:java -Xmx2089M -version,若是出现Java版本,说明你的jvm内存能够设置到2089M。web

Linux系统中tomcat的启动参数:面试

export JAVA_OPTS="-server -Xms1400M -Xmx1400M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=128M -XX:MaxPermSize=256M 
-XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection
-XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true "

Windows系统中tomcat的启动参数:数据库

set JAVA_OPTS=-server -Xms1400M -Xmx1400M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=128M -XX:MaxPermSize=256M 
-XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection
-XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true
  •  -server

  这个参数必须加上,由于tomcat默认是以一种叫java –client的模式来运行的,server即意味着你的tomcat是以真实的production的模式在运行的,这也就意味着你的tomcat以server模式运行时将拥有:更大、更高的并发处理能力,更快更强捷的JVM垃圾回收机制等。apache

  • -Xms和–Xmx

  Xms是JVM初始化时的内存大小;Xmx是jvm的最大内存大小。Xms默认是物理内存的1/64,Xmx默认是物理内存的1/4,建议是物理内存的80%,可是通常咱们会把Xms和Xmx设置同样大,这样在服务器启动时就是最大值能够避免内存膨胀和回落时带来的资源的消耗。特别是回落时会带来cpu的高速运转进行垃圾回收,系统可能会出现几秒甚至几十秒的卡顿现象。

  • –Xmn

  Xmn是年轻代大小。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代通常固定大小为64m,因此增大年轻代后,将会减少年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。

  •  -Xss

  是指设定每一个线程的堆栈大小。这个就要依据你的程序,看一个线程 大约须要占用多少内存,可能会有多少线程同时运行等。通常不易设置超过1M,要否则容易出现out ofmemory。

 

  • -XX:NewSize :默认为2M,此值设大可调大新对象区,减小FullGC次数
  • -XX:NewRatio :改变新旧空间的比例,意思是新空间的尺寸是旧空间的1/8(默认为8)
  • -XX:SurvivorRatio :改变Eden对象空间和残存空间的尺寸比例,意思是Eden对象空间的尺寸比残存空间大survivorRatio+2倍(缺省值是10)

 

 

  • -XX:+AggressiveOpts

  做用如其名(aggressive),启用这个参数,则每当JDK版本升级时,你的JVM都会使用最新加入的优化技术(若是有的话)

  • -XX:+UseBiasedLocking

  启用一个优化了的线程锁,咱们知道在咱们的appserver,每一个http请求就是一个线程,有的请求短有的请求长,就会有请求排队的现象,甚至还会出现线程阻塞,这个优化了的线程锁使得你的appserver内对线程处理自动进行最优调配。

  • -XX:PermSize=128M和-XX:MaxPermSize=256M

  JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;在数据量的很大的文件导出时,必定要把这两个值设置上,不然会出现内存溢出的错误。由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。那么,若是是物理内存4GB,那么64分之一就是64MB,这就是PermSize默认值,也就是永生代内存初始大小;四分之一是1024MB,这就是MaxPermSize默认大小。

  PermGen space的全称是Permanent Generationspace,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到

  PermGenspace中,它和存放类实例(Instance)的Heap区域不一样,GC(GarbageCollection)不会在主程序运行期对PermGenspace进行清理,因此若是你的应用中有很CLASS的话,就极可能出现“java.lang.OutOfMemoryError:PermGen space”错误。

  对于WEB项目,jvm加载类时,永久域中的对象急剧增长,从而使jvm不断调整永久域大小,为了不调整),你可使用更多的参数配置。若是你的WEBAPP下都用了大量的第三方jar, 其大小超过了jvm默认的大小,那么就会产生此错误信息了。

  • -XX:+DisableExplicitGC

  在程序代码中不容许有显示的调用”System.gc()”。看到过有两个极品工程中每次在DAO操做结束时手动调用System.gc()一下,以为这样作好像可以解决它们的out ofmemory问题同样,付出的代价就是系统响应时间严重下降,就和我在关于Xms,Xmx里的解释的原理同样,这样去调用GC致使系统的JVM大起大落,性能不到什么地方去哟!

  • -XX:+UseParNewGC

  对年轻代采用多线程并行回收,这样收得快。

  • -XX:ParallelGCThreads 可用来增长并行度【多CPU】
  • -XXUseParallelGC 设置后可使用并行清除收集器【多CPU】
  • -XX:+UseConcMarkSweepGC

  即CMS gc,这一特性只有jdk1.5即后续版本才具备的功能,它使用的是gc估算触发和heap占用触发。

咱们知道频频繁的GC会造面JVM的大起大落从而影响到系统的效率,所以使用了CMS GC后能够在GC次数增多的状况下,每次GC的响应时间却很短,好比说使用了CMS GC后通过jprofiler的观察,GC被触发次数很是多,而每次GC耗时仅为几毫秒。

  • -XX:MaxTenuringThreshold

  设置垃圾最大年龄。若是设置为0的话,则年轻代对象不通过Survivor区,直接进入年老代。对于年老代比较多的应用,能够提升效率。若是将此值设置为一个较大值,则年轻代对象会在Survivor区进行屡次复制,这样能够增长对象再年轻代的存活时间,增长在年轻代即被回收的几率。

  这个值的设置是根据本地的jprofiler监控后获得的一个理想的值,不能一律而论原搬照抄。

  • -XX:+CMSParallelRemarkEnabled

  在使用UseParNewGC 的状况下, 尽可能减小 mark 的时间

  • -XX:+UseCMSCompactAtFullCollection

  在使用concurrent gc 的状况下, 防止 memoryfragmention, 对live object 进行整理, 使 memory 碎片减小。

  • -XX:LargePageSizeInBytes

  指定 Java heap的分页页面大小

  • -XX:+UseFastAccessorMethods

  get,set 方法转成本地代码

  • -XX:+UseCMSInitiatingOccupancyOnly

  指示只有在 oldgeneration 在使用了初始化的比例后concurrent collector 启动收集

  • -XX:CMSInitiatingOccupancyFraction=70

  CMSInitiatingOccupancyFraction,这个参数设置有很大技巧,基本上知足(Xmx-Xmn)*(100- CMSInitiatingOccupancyFraction)/100>=Xmn就不会出现promotion failed。在个人应用中Xmx是6000,Xmn是512,那么Xmx-Xmn是5488兆,也就是年老代有5488 兆,CMSInitiatingOccupancyFraction=90说明年老代到90%满的时候开始执行对年老代的并发垃圾回收(CMS),这时还 剩10%的空间是5488*10%=548兆,因此即便Xmn(也就是年轻代共512兆)里全部对象都搬到年老代里,548兆的空间也足够了,因此只要满 足上面的公式,就不会出现垃圾回收时的promotion failed;

所以这个参数的设置必须与Xmn关联在一块儿。

  •  -Djava.awt.headless=true

  这个参数通常咱们都是放在最后使用的,这全参数的做用是这样的,有时咱们会在咱们的J2EE工程中使用一些图表工具如:jfreechart,用于在web网页输出GIF/JPG等流,在winodws环境下,通常咱们的app server在输出图形时不会碰到什么问题,可是在linux/unix环境下常常会碰到一个exception致使你在winodws开发环境下图片显示的好好但是在linux/unix下却显示不出来,所以加上这个参数以避免避这样的状况出现。

  上述这样的配置,基本上能够达到:

  • 系统响应时间增快
  • JVM回收速度增快同时又不影响系统的响应率
  • JVM内存最大化利用
  • 线程阻塞状况最小化

 

配置优化

  主要是优化conf/server.xml文件中相关配置参数。

链接器优化

  这里主要是优化connector标签中的相关参数,用于处理访问的请求;固然此标签中也能够设置线程的相关参数,可是为了更好的性能通常咱们使用外部的线程池,这样有利于线程的复用,以减小线程的建立和销毁带来的资源消耗;另外,咱们也能够修改tomcat的运行模式:BIO,NIO,AIO(NIO2),APR.

  1. 首先,咱们须要禁用AJP协议

  AJP链接器:
  用于将Apache与Tomcat集成在一块儿,当Apache接收到动态内容请求时,经过在配置中指定的端口号将请求发送给在此端口号上监听的AJP链接器组件。
  属性:
    backlog:当全部可能的请求处理线程都在使用时,队列中排队的请求最大数目。默认为10,当队列已满,任何请求都将被拒绝
    maxSpareThread:容许存在空闲线程的最大数目,默认值为50
    maxThread:最大线程数,默认值为200
    minSpareThreads:设当链接器第一次启动时建立线程的数目,确保至少有这么多的空闲线程可用,默认值为4
    port:服务端套接字的TCP端口号,默认值为8089(必须)
    topNoDelay:为true时,能够提升性能,默认值为true
    soTimeout:超时值
    例:
    <!—Define an AJP1.3 Connector on port 8089-->
    <Connector port=”8089” enableLookups=”false” redirectPort=”8443” protocol=”AJP/1.3” />  

  AJPv13协议是面向包的。WEB服务器和Servlet容器经过TCP链接来交互;为了节省SOCKET建立的昂贵代价,WEB服务器会尝试维护一个永久TCP链接到servlet容器,而且在多个请求和响应周期过程会重用链接。咱们通常是使用Nginx+tomcat的架构,因此用不着AJP协议,因此把AJP链接器禁用。

  

  2.Connector标签常见参数的配置:

<Connector port="8080" protocol="HTTP/1.1"
    //编码格式
       URIEncoding="UTF-8" 
    //线程配置
    maxThreads="1000" maxProcessors="1000" minProcessors="5" minSpareThreads="100" maxSpareThreads="1000
    //链接数配置
    maxConnections="1000"
    connectionTimeout="20000" acceptCount="1000"
    //是否关闭DNS的反响查询 false:关闭,true:开启
    enableLookups="false"
    //是否保持长时间链接,false:关闭,ture:开启
    disableUploadTimeout="true"
    //是否开启对url进行校验的配置 ,false:关闭,true:开启
    useURIValidationHack="false"
    //启用压缩的配置 
    compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
    //post请求提交最大大小
    maxPostSize="10485760"

    maxHttpHeaderSize="8192"
    tcpNoDelay="true"

    acceptorThreadCount="8"
    redirectPort
="8443" />
  •  port:表明Tomcat监听端口,也就是网站的访问端口,默认为8080,能够根据须要改为其余。
  • protocol:协议类型,可选类型有四种,分别为BIO(阻塞型IO),NIO,NIO2和APR。
  • maxThreads:Tomcat使用线程来处理接收的每一个请求。此值是由该链接器建立的处理请求的线程的最大数目,也就是最大并发数。若是未配置默认值为200。若是一个执行器与此链接器关联,则该属性将被忽略,因此该链接器将使用执行器而不是一个内部线程池来执行任务。可是这个值的是指和jvm内存和为每一个线程所分配的内存大小有关
  • minSpareThreads:tomcat初始化时建立的线程数,线程的最小运行数目,这些始终保持运行。若是未指定,默认值为10。
  • maxSpareThreads:maxSpareThreads 的意思就是若是空闲状态的线程数多于设置的数目,则将这些线程停止,减小这个池中的线程总数。
  • acceptCount:当线程数达到maxThreads后,后续请求会被放入一个等待队列,这个acceptCount是这个队列的大小,若是这个队列也满了,就直接refuse connection。若是未指定,默认值为100。通常是设置的跟 maxThreads同样或一半,此值设置的过大会致使排队的请求超时而未被处理。因此这个值应该是主要根据应用的访问峰值与平均值来权衡配置。
  • maxConnections:在任何给定的时间内,服务器将接受和处理的最大链接数。当这个数字已经达到时,服务器将接受但不处理,等待进一步链接。NIO与NIO2的默认值为10000,APR默认值为8192。
  • connectionTimeout:当请求已经被接受,但未被处理,也就是网络链接超时时间毫秒数。单位为毫秒,默认值为60000。一般状况下设置为30000。
  • maxHttpHeaderSize:请求和响应的HTTP头的最大大小,以字节为单位指定。若是没有指定,这个属性被设置为8192(8 KB)。
  • tcpNoDelay:若是为true,服务器socket会设置TCP_NO_DELAY选项,在大多数状况下能够提升性能。缺省状况下设为true。
  • compression:是否启用gzip压缩,默认为关闭状态。这个参数的可接受值为“off”(不使用压缩),“on”(压缩文本数据),“force”(在全部的状况下强制压缩)。
  • compressionMinSize:若是compression="on",则启用此项。被压缩前数据的最小值,也就是超过这个值后才被压缩。若是没有指定,这个属性默认为“2048”(2K),单位为byte。
  • noCompressionUserAgents:对于如下的浏览器,不启用压缩
  • compressableMimeType:压缩类型
  • disableUploadTimeout:相似于Apache中的keeyalive同样.这个标志容许servlet Container在一个servlet执行的时候,使用一个不一样的,更长的链接超时。最终的结果是给servlet更长的时间以便完成其执行,或者在数据上载的时候更长的超时时间。若是没有指定,设为false。
  • enableLookups:为了消除DNS的反向查询对性能的影响咱们能够关闭DNS查询。这个功效和Apache中的HostnameLookups同样,设为关闭。
  • URIEncoding:URL编码字符集。使得tomcat能够解析含有中文名的文件的url,真方便,不像apache里还有搞个mod_encoding,还要手工编译
  • maxPostSize:设置post提交内容大小。经过将此属性设置为小于零的值,能够禁用限制。若是未指定,则此属性设置为2097152(2兆字节)。
  • acceptorThreadCount:默认是1,通常调成和cpu的线程数保持一致,好比8线程的cpu,值就调成:8.
  • allowTrace:是否容许HTTP的TRACE方法,默认为false
  • emptySessionPath:若是设置为true,用户的全部路径都将设置为/,默认为false
  • proxyName:如这个链接器正在一个代理配置中被使用,指定这个属性,在request.getServerName()时返回
  • scheme:设置协议的名字,在request.getScheme()时返回,SSL链接器设为”https”,默认为”http”
  • secure:在SSL链接器可将其设置为true,默认为false
  • useBodyEncodingForURI:主要用于Tomcat4.1.x中,指示是否使用在contentType中指定的编码来取代URIEncoding,用于解码URI查询参数,默认为false
  • xpoweredBy:为true时,Tomcat使用规范建议的报头代表支持Servlet的规范版本,默认为false
  • bufferSize:设由链接器建立输入流缓冲区的大小,以字节为单位。默认状况下,缓存区大的大小为2048字节
  • disableUploadTimeOut:容许Servlet容器,正在执行使用一个较长的链接超时值,以使Servlet有较长的时间来完成它的执行,默认值为false
  • maxKeepAliveRequest:服务器关闭以前,客户端发送的流水线最大数目。默认值为100
  • socketBuffer:设Socket输出缓冲区的大小(以字节为单位),-1表示禁止缓冲,默认值为9000字节
  • toNoDelay:为true时,能够提升性能。默认值为true
  • threadPriority:设JVM中请求处理线程优先级。默认值为NORMAL-PRIORITY
  • maxProcessors与minProcessors:在 Java中线程是程序运行时的路径,是在一个程序中与其它控制线程无关的、可以独立运行的代码段。它们共享相同的地址空间。多线程帮助程序员写出CPU最 大利用率的高效程序,使空闲时间保持最低,从而接受更多的请求。一般Windows是1000个左右,Linux是2000个左右。
  • useURIValidationHack:能够看到若是把useURIValidationHack设成"false",能够减小它对一些url的没必要要的检查从而减省开销

  固然Connector标签中的参数还有不少,这是只是常见的参数设置;而且这些中的参数也不必定都要设置,须要根据项目的具体状况去设置。

   最后不要忘了把8443端口的地方也加上一样的配置,由于若是咱们走https协议的话,咱们将会用到8443端口这个段的配置:

<!--enable tomcat ssl-->
    <Connector port="8443" protocol="HTTP/1.1"

          URIEncoding="UTF-8"  minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" connectionTimeout="20000"acceptCount="300"  maxThreads="300" 
      maxProcessors="1000" minProcessors="5" useURIValidationHack="false" compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
      SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="d:/tomcat2/conf/shnlap93.jks" keystorePass="aaaaaa" />

 

线程池优化

   在tomcat中每个用户请求都是一个线程,因此可使用线程池提升性能.在介绍Connector标签中咱们看到已经有线程的相关参数的设置,为何还要有线程池?其实这个和Java中的线程池是一个道理,使用线程池可使多链接公用线程,避免线程的频繁的建立和销毁带来的资源消耗。 

  引入线程池的方法,使用Connector标签中的executor的属性,将其值设置为Executor标签的name的值。例如:

<Connector port="8066" executor="tomcatThreadPool" protocol="org.apache.coyote.http11.Http11NioProtocol"
            connectionTimeout="20000"  enableLookups="false" maxPostSize="10485760" URIEncoding="UTF-8" useBodyEncodingForURI="true" 
      acceptCount="100" acceptorThreadCount="2" disableUploadTimeout="true" maxConnections="10000" SSLEnabled="false" />
 <Executor name="tomcatThreadPool"   
         namePrefix="catalina-exec-"  maxThreads="1000" minSpareThreads="100" maxIdleTime="60000"  
         maxQueueSize="Integer.MAX_VALUE" prestartminSpareThreads="false" threadPriority="5"  
         className="org.apache.catalina.core.StandardThreadExecutor"/>  

   Executor线程池的参数介绍:

  • name:线程池名称,用于 Connector中指定。
  • namePrefix:所建立的每一个线程的名称前缀,一个单独的线程名称为 namePrefix+threadNumber。
  • maxThreads:池中最大线程数。
  • minSpareThreads:活跃线程数,也就是核心池线程数,这些线程不会被销毁,会一直存在。
  • maxIdleTime:线程空闲时间,超过该时间后,空闲线程会被销毁,默认值为6000(1分钟),单位毫秒。
  • maxQueueSize:在被执行前最大线程排队数目,默认为Int的最大值,也就是广义的无限。除非特殊状况,这个值不须要更改,不然会有请求不会被处理的状况发生。
  • prestartminSpareThreads:启动线程池时是否启动 minSpareThreads部分线程。默认值为false,即不启动。
  • threadPriority:线程池中线程优先级,默认值为5,值从1到10。
  • className:线程池实现类,未指定状况下,默认实现类为org.apache.catalina.core.StandardThreadExecutor。若是想使用自定义线程池首先须要实现 org.apache.catalina.Executor接口。

 

优化IO模式

  tomcat中io模式通常分为分别为BIO(阻塞型IO),NIO,NIO2和APR。区别:

      

 

  其实从上面的分析咱们并不能简单的认为BIO的性能就必定不如 NIO,这几种类型 Connector之间并无明显的性能区别,但它们之间实现流程和原理不一样,因此它们的选择是须要根据应用的类型来决定的。

  • BIO:BIO(Blocking I/O),顾名思义,即阻塞式I/O操做,表示Tomcat使用的是传统的Java I/O操做(即java.io包及其子包)。Tomcat在默认状况下,是以bio模式运行的。遗憾的是,就通常而言,bio模式是三种运行模式中性能最低的一种。BIO配置采用默认便可。适用于链接数目比较小且固定的架构,处理简单流程,如程序处理较快能够当即返回结果,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4之前的惟一选择,但程序直观简单易理解.
  • NIO:NIO(New I/O),是Java SE 1.4及后续版本提供的一种新的I/O操做方式(即java.nio包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操做的java API,所以nio也被当作是non-   blocking I/O的缩写。它拥有比传统I/O操做(bio)更好的并发运行性能。适用于链接数目多且链接比较短(轻操做)的架构,好比聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持;更适合后台须要耗时完成请求的操做,如程序接到了请求后须要比较耗时的处理这已请求,因此没法当即返回结果,这样若是采用BIO就会占用一个链接,而使用NIO后就能够将此链接转让给其余请求,直至程序处理完成返回为止。
  • APR:APR(Apache Portable Runtime/Apache可移植运行时),是Apache HTTP服务器的支持库。你能够简单地理解为:Tomcat将以JNI的形式调用 Apache HTTP服务器的核心动态连接库来处理文件读取或   网络传输操做,从而大大地提升 Tomcat对静态文件的处理性能。能够大大提高Tomcat对静态文件的处理性能,同时若是你使用了HTTPS方式传输的话,也能够提高SSL的处理性能;链接数目多且链接比较长(重操做)的架构,好比相册服务器,充分调用OS参与并发操做,编程比较复杂,JDK7开始支持.

修改io模式:

 <Connector connectionTimeout="20000" port="8066" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8448"/>

  从上面代码能够看出修改io模式其实就是修改connector标签中的protocol属性的值,其余几种io模式对应的值以下:

//BIO  
protocol="HTTP/1.1"  
//NIO  
protocol="org.apache.coyote.http11.Http11NioProtocol"  
//NIO2  
protocol="org.apache.coyote.http11.Http11Nio2Protocol"  
//APR  
protocol="org.apache.coyote.http11.Http11AprProtocol"  

  

监听器Listener配置

  另外一个影响Tomcat 性能的因素是内存泄露。Server标签中能够配置多个Listener,其中 JreMemoryLeakPreventionListener是用来预防JRE内存泄漏。此Listener只需在Server标签中配置便可,默认状况下无需配置,已经添加在 Server中

<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />  

 

压缩

   压缩也是tomcat性能优化比较中要的一部分,主要是经过connector标签中的下面几个参数来实现的

compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"

  HTTP 压缩能够大大提升浏览网站的速度,它的原理是,在客户端请求网页后,从服务器端将网页文件压缩,再下载到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的浏览过程HTML,CSS,Javascript , Text ,它能够节省40%左右的流量。更为重要的是,它能够对动态生成的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等输出的网页也能进行压缩,压缩效率惊人。

 

数据库性能调优

  Tomcat性能在等待数据库查询被执行期间会下降。现在大多数应用程序都是使用可能包含“命名查询”的关系型数据库。若是是那样的话,Tomcat会在启动时默认加载命名查询,这个可能会提高性能。另外一件重要事是确保全部数据库链接正确地关闭。给数据库链接池设置正确值也是十分重要的。我所说的值是指Resource要素的最大空闲数(maxIdle),最大链接数(maxActive),最大创建链接等待时间(maxWait)属性的值。由于配置依赖与应用要求,我也不能在本文指定正确的值。你能够经过调用数据库性能测试来找到正确的值。固然数据库调优自己就是一个功能好大且至关复杂的工做,后面咱们会专门研究如何进行数据调优!

tomcat原生库

   Tomcat的原生库基于Apache可移植运行时(Apache Portable Runtime简称APR),给程序员提供了超强的扩展性和性能,在产品运做中帮助融合原生的服务器技术以展示最佳的性能。想知道安装说明的朋友请参考Tomcat Native Library – (APR) Installation

其余优化措施

  • 开启浏览器的缓存,这样读取存放在webapps文件夹里的静态内容会更快,大大推进总体性能。
  • 每当开机时,Tomcat服务器应当自动地重启。
  • 通常状况下HTTPS请求会比HTTP请求慢。若是你想要更好的安全性,即便慢一点咱们仍是要选择HTTPS。
  • 经过nignx进行动静分离

 

学习连接

tomcat配置文件详解

tomcat配置详解及相关面试题

tomcat小猫飞起配置

tomcat性能监控工具的使用

相关文章
相关标签/搜索