1. 优化连接器(Connector)配置
连接器是Tomcat处理HTTP请求的核心组件,合理配置可显著提升响应速度。首先,使用NIO或NIO2连接器替代传统的BIO(阻塞I/O),它们支持更高的并发处理能力,适合高负载场景。在server.xml中配置示例:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
connectionTimeout="20000" redirectPort="8443" />
其次,启用HTTP/2协议(Tomcat 8.5及以上版本支持),通过多路复用、头部压缩等功能减少页面加载时间。配置示例如下:
<Connector port="8443" protocol="org.apache.coyote.http2.Http2Protocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
certificateFile="conf/localhost-rsa-cert.pem"
certificateChainFile="conf/localhost-rsa-chain.pem"
type="RSA" />
</SSLHostConfig>
</Connector>
此外,调整连接参数:maxThreads(最大线程数,建议500-1000,根据服务器CPU核心数调整)、minSpareThreads(最小空闲线程数,建议50-100,保持快速响应)、acceptCount(最大排队请求数,建议100-200,避免请求被拒绝)、connectionTimeout(连接超时,建议30000毫秒,避免长时间占用资源)。示例:
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="500" minSpareThreads="50"
acceptCount="100" connectionTimeout="30000"
redirectPort="8443" />
最后,禁用DNS查询(enableLookups="false"),避免Tomcat解析客户端IP地址的主机名,减少不必要的开销。
2. 调优线程池配置
线程池是Tomcat处理请求的关键资源,合理的线程池配置能提高并发处理能力。在server.xml中通过<Executor>定义线程池,然后关联到连接器:
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="500" minSpareThreads="50"
maxQueueSize="100" />
<Connector executor="tomcatThreadPool" port="8080"
protocol="HTTP/1.1" connectionTimeout="20000"
redirectPort="8443" />
参数说明:maxThreads(最大线程数,根据服务器资源调整)、minSpareThreads(最小空闲线程数,保持快速响应)、maxQueueSize(请求队列大小,避免无限制排队导致内存溢出)。
3. 优化JVM参数
JVM调优直接影响Tomcat的内存使用和垃圾回收效率。首先,调整堆内存大小:-Xms(初始堆内存)和-Xmx(最大堆内存)设置为相同值(如2048m),避免堆内存动态扩展带来的性能损耗;-Xmn(年轻代内存,建议为堆内存的1/3-1/2,如1024m),优化新生代垃圾回收效率。示例:
export JAVA_OPTS="-Xms2048m -Xmx2048m -Xmn1024m"
其次,选择合适的垃圾回收器:对于高并发场景,推荐使用G1GC(-XX:+UseG1GC),它支持并发标记和整理,减少停顿时间;对于Java 7及以下版本,可使用ParallelGC(-XX:+UseParallelGC)。示例:
export JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC"
最后,调整元空间大小(Java 8及以上):-XX:MetaspaceSize=256m(初始元空间)、-XX:MaxMetaspaceSize=512m(最大元空间),避免元空间溢出。
4. 启用压缩功能
通过压缩HTTP响应内容(如HTML、CSS、JavaScript、JSON),减少网络传输数据量,提升页面加载速度。在server.xml的连接器中配置:
<Connector port="8080" protocol="HTTP/1.1"
compression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/plain,application/json"
connectionTimeout="20000" redirectPort="8443" />
参数说明:compression="on"(开启压缩)、compressionMinSize(启用压缩的最小内容大小,如2KB)、compressableMimeType(需要压缩的MIME类型)。
5. 调整操作系统内核参数
Debian系统的内核参数会影响Tomcat的网络性能,需调整以下关键参数(通过sysctl命令):
net.core.rmem_max=16777216(接收缓冲区最大值)、net.core.wmem_max=16777216(发送缓冲区最大值);net.ipv4.tcp_tw_reuse=1(减少TIME-WAIT状态的连接数,提升高并发下的连接复用率);net.core.somaxconn=4096(避免连接队列溢出,导致请求被拒绝)。sysctl -p使配置生效。6. 使用缓存策略
server.xml的<Context>配置静态资源(如图片、CSS、JS)的缓存时间,减少对Tomcat的请求。示例:<Context path="/static" docBase="/var/www/static"
cachingAllowed="true" cacheMaxSize="102400"
cacheObjectMaxSize="51200" />
7. 禁用不必要的功能
server.xml中注释或删除AJP配置),减少资源消耗。enableLookups="false")。8. 监控与持续调优
使用监控工具(如VisualVM、JConsole、Prometheus+Grafana)实时监控Tomcat的性能指标(如线程池使用率、JVM内存占用、GC频率、响应时间),根据监控结果针对性调整参数。例如:
maxThreads;