vlambda博客
学习文章列表

如何高效玩转Tomcat实战

Tomcat性能优化从以下几个方面开展,具体如下:

Tomcat配置层面

  • 优化配置参数(conf/server.xml)

<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000" redirectPort="8443"acceptCount="500" maxThreads="400" disableUploadTimeout="true" enableLookups="false"   URIEncoding="UTF-8" />

增加maxThreads和acceptCount属性(使acceptCount大于等于maxThreads)

• protocol协议 运行模式默认BIO

• maxThreads:tomcat可用于请求处理的最大线程数,默认是200• minSpareThreads:tomcat初始线程数,即最小空闲线程数

• maxSpareThreads:tomcat最大空闲线程数,超过的会被关闭

• acceptCount:当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理.默认100

• URIEncoding=”UTF-8″ :使得tomcat可以解析含有中文名的文件的url,真方便,不像apache里还有搞个mod_encoding,还要手工编译

• enableLookups="false"关闭DNS扫描 是否反查域名

• disableUploadTimeout:容许Servlet容器,正在执行使用一个较长的链接超时值,以使Servlet有较长的时间来完成它的执行,默认值为false


  • 配置内存大小(bin/catalina.bat/sh)

JAVA_OPTS="-server -Xms1G -Xmx2G -Xss256K -Djava.awt.headless=true -Dfile.encoding=utf-8 -XX:MaxPermSize=256m -XX:PermSize=128M -XX:MaxPermSize=256M"

• -server:启用jdk的server版本。

• -Xms:虚拟机初始化时的最小堆内存。

• -Xmx:虚拟机可使用的最大堆内存。#-Xms与-Xmx设成一样的值,避免JVM因为频繁的GC导致性能大起大落

• -XX:PermSize:设置非堆内存初始值,默认是物理内存的1/64。

• -XX:MaxNewSize:新生代占整个堆内存的最大值。

• -XX:MaxPermSize:Perm(俗称方法区)占整个堆内存的最大值,也称内存最大永久保留区域。


  • 使用线程池(conf/server.xml)

<Executor name="tomcatThreadPool" namePrefix="req-exec-" maxThreads="1000" minSpareThreads="50" maxIdleTime="60000"/>
<Connector port="8080" protocol="HTTP/1.1" executor="tomcatThreadPool"/>

• namePrefix:线程池中线程的命名前缀

• maxThreads:线程池的最大线程数

• minSpareThreads:线程池的最小空闲线程数

• maxIdleTime:超过最小空闲线程数时,多的线程会等待这个时间长度,然后关闭

• threadPriority:线程优先级


  • 运行模式BIO, NIO, APR调整(conf/server.xml)

1)BIO:一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下在Linux系统中默认使用这种方式。

2)NIO:利用Java的异步IO处理,可以通过少量的线程处理大量的请求。Tomcat8在Linux系统中默认使用这种方式。Tomcat7必须修改Connector配置来启动(conf/server.xml配置文件):

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

3)APR(Apache Portable Runtime):从操作系统层面解决io阻塞问题。Linux如果安装了apr和native,Tomcat直接启动就支持apr。


Tomcat 部署层面

  • 物理机实施部署

  • 增加服务器CPU和内存等配置提高性能

  • 虚拟化集群方案nginx+tomcat1+tomcat2

  • 云集群方案WAF+SLB+tomcat1+tomcat2

小谭撩码
一起学习
33篇原创内容
Official Account