因为Tomcat不同版本之间的优化配置有所差别,这里以Tomcat7为例进行讲解。
1.禁用AJP协议,达到在集群的时候提高处理请求的时间。
禁用方法:在server.xml中,将<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
注释掉,重新启动tomcat,这时我们可以看到控制台上已经不存在“ajp-bio-8089”,说明AJP协议已被禁用。
2.将BIO通讯模式修改为NIO通讯模式。
Tomcat通讯协议支持http1.0和http1.1,Tomcat默认走的是BIO通讯模式(为了兼容Java4以下的版本),配置方法如下:
在server.xml中 ,将 <Connector connectionTimeout="20000" port="8066" protocol="HTTP/1.1" redirectPort="8448"/>
改为:
<Connector connectionTimeout="20000" port="8066" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8448"/>
其中,原来的protocol="HTTP/1.1"表示遵循http1.1协议,同时,也是一个最原始的未经优化的通信协议。
3.启用外部连接池,来满足高并发已经复用的请求。
配置方法如下:
将<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="300" minSpareThreads="4"/>注释打开,并修改maxThreads的值,然后在<Connector connectionTimeout="20000" port="8066" protocol="org.apache.coyote.http11.Http11NioProtocol"/>
中加入 executor="tomcatThreadPool",即最后为:
<Connector connectionTimeout="20000" port="8066" executor="tomcatThreadPool" protocol="org.apache.coyote.http11.Http11NioProtocol"/>
其中maxThreads表示Tomcat起动的最大线程数,即同时处理的任务个数,默认值为200。
根据业务场景和服务器硬件资源条件可以适当的加大线程连接池,根据第三方工具去开启并发测试来确定一个最好的连接池数。
4.优化连接器。
配置Connector标签如下:
<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" />
5.设置JVM参数。
修改bin/catalina.bat文件设置参数(注释后第一行),增加:
set JAVA_OPTS=-Dfile.encoding=UTF-8
-server
-Xms1024m
-Xmx2048m
-XX:NewSize=512m
-XX:MaxNewSize=1024m
-XX:PermSize=256m
-XX:MaxPerPermSize=356m
-XX:NewRatio=2
-XX:MaxTenuringThreshold=50
-XX:+DisableExplicitGC
以上便是我个人所了解的Tomcat的性能优化方法,欢迎补充指正。