Tomcat调优大致分为两大类:
一、Tomcat的自身调优
采用动静分离节约Tomcat的性能
调整Tomcat的线程池
调整Tomcat的连接器
修改Tomcat的运行模式
禁用AJP连接器
二、JVM的调优
调优JVM内存
一、Tomcat自身调优
1、采用动静分离
静态资源如果让Tomcat处理的话Tomcat的性能会被损耗很多,所以一般采用Nginx+Tomcat实现动静分离,让Tomcat只负责jsp文件的解析工作,Nginx实现静态资源的访问。
2、调优Tomcat线程池
在Tomcat的serve.xml配置文件下配置Executor,相关参数如下:
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4" maxIdleTime="6000"/>
name:线程池的名字;
namePrefix:指定线程池中每一个线程的name前缀;
maxThreads:设定线程池中最大线程数量,当请求数量为N(比maxThreads大很多),这将不是意味着将maxThreads属性设为 N,而是建议采用Tomcat集群。即,假设此时有2N个请求,更好的解决办法是在两个Tomcat设置maxThreads属性为N而不是在一个Tomcat的情况下设maxThreads为2N。
minSpareThreads:线程池中允许的空闲线程数;
maxIdLeTime:一个线程空闲多久算作是一个空闲线程的量;
3、调优Tomcat的连接器Connector
在Tomcat的Serve.xml配置文件中配置Connector,相关参数如下:
<Connector executor="tomcatThreadPool"
port="11009" protocol="HTTP/1.1"
connectionTimeout="20000"
enableLookups="false"
URIEncoding="UTF-8"/>
executor:指定这个连接器所使用的线程池;
enableLookups=false;关闭DNS解析,减少性能损耗;
min(max)Processors:服务器启动时创建的最小(大)线程数;
acceptCount=1000:当线程池中的线程都被占用时,队列中允许存放的请求数;
4、修改Tomcat的运行模式
BIO:Tomcat 8 以下版本默认使用BIO(阻塞式IO)模式,对于每一个请求都要创建一个线程来进行处理,不适合高并发。
NIO:Tomcat 8 以上版本默认使用NIO(非阻塞式IO)模式。
APR:Apache Protable Runtime,Tomcat生产环境运行的首选方式,如果操作系统没有安装APR或者APR路径未指定到Tomcat默认可识别的路径,则APR模式无法启动,此时自动切换为NIO模式,安装APR和Native,直接启动就支持APR。APR是从操作系统级别解决异步IO问题,APR的本质是使用JNI技术调用操作系统底层的IO接口,所以需要提前安装所需要的依赖提升Tomcat对静态文件的处理性能。
5、禁用AJP连接器
AJP:Apache JServer Protocol,使用Nginx+Tomcat的架构,所以用不着AJP协议,所以把AJP连接器禁用。具体位置如下:
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector jvmRoute="tomcat1" port="8081" protocol="AJP/1.3" redirectPort="8443"/>
二、JVM调优
Tomcat是运行在JVM上的,所以对JVM的调优也是非常有必要的。