一、连接器(Connector)配置优化
连接器是Tomcat处理HTTP请求的核心组件,其性能直接影响访问速度。需重点调整以下参数:
Http11NioProtocol)或NIO2(Http11Nio2Protocol)连接器,替代传统的BIO(阻塞式),显著提升高并发下的吞吐量。例如:<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" .../>。Http2Protocol配置,需配合SSL证书使用:<Connector port="8443" protocol="org.apache.coyote.http2.Http2Protocol" SSLEnabled="true" .../>。maxThreads(最大线程数,建议200-500,根据CPU核心数和并发量调整)、minSpareThreads(最小空闲线程数,建议50-100,保持基础并发能力)、maxConnections(最大连接数,建议10000+,应对大量并发连接)、connectionTimeout(连接超时时间,建议20000-30000ms,避免长时间占用资源)。server.xml中注释或删除AJP连接器,减少资源占用:<!-- <Connector port="8009" protocol="AJP/1.3" .../> -->。二、线程池配置优化
线程池负责处理请求的执行,合理配置可避免线程饥饿或过度创建:
server.xml中定义Executor,并通过connector的executor属性引用,实现线程资源的集中管理。例如:<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="200" minSpareThreads="50"
maxQueueSize="100" threadPriority="5"/>
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" .../>
其中,maxThreads为最大线程数,minSpareThreads为最小空闲线程数,maxQueueSize为等待队列大小(避免无限制排队)。三、JVM调优
JVM内存和垃圾回收(GC)配置直接影响Tomcat的稳定性和响应速度:
-Xms(初始堆大小)和-Xmx(最大堆大小),建议两者相等(避免堆扩容带来的停顿),例如-Xms4G -Xmx4G。同时,设置年轻代(-Xmn,建议为堆的1/3-1/2)和老年代比例(-XX:NewRatio,建议2-3)。-XX:+UseG1GC),它在保证吞吐量的同时,减少停顿时间;传统场景可使用ParallelGC(-XX:+UseParallelGC),适合吞吐量优先的任务。-XX:ParallelGCThreads,建议为CPU核心数的1/2-1)、年轻代收集频率(-XX:MaxGCPauseMillis,建议200-500ms)等,平衡吞吐量和延迟。四、静态资源优化
静态资源(图片、CSS、JS等)的加载速度直接影响页面整体响应时间:
server.xml的Connector中配置compression="on",并指定压缩的MIME类型(如text/html,text/xml,application/json)和最小压缩大小(compressionMinSize="2048",建议2KB以上),减少网络传输量:<Connector ... compression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/xml,application/json"/>
```。
Expires或Cache-Control头部设置静态资源的缓存时间(如<Context cachingAllowed="true" cacheMaxSize="100000" cacheObjectMaxSize="51200"/>),避免重复请求。五、数据库连接池优化
数据库访问是应用性能的瓶颈之一,优化连接池可减少连接创建和查询时间:
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
config.setUsername("user");
config.setPassword("password");
config.setMaximumPoolSize(20); // 最大活跃连接数
config.setMinimumIdle(5); // 最小空闲连接数
config.setIdleTimeout(600000); // 空闲连接超时时间(10分钟)
config.setMaxLifetime(1800000); // 连接最大生命周期(30分钟)
config.setConnectionTestQuery("SELECT 1"); // 连接有效性检查SQL
HikariDataSource dataSource = new HikariDataSource(config);
```。
maxActive(根据数据库最大连接数调整)、maxWait(获取连接的最大等待时间,避免请求阻塞)、validationQuery(连接有效性检查)、testWhileIdle(空闲时检查连接有效性)等。try-with-resources或finally块关闭,避免连接泄漏导致池耗尽。六、应用层优化
应用代码的性能直接影响Tomcat的处理效率:
HashMap替代List进行查找)、避免在循环中进行数据库操作。session-timeout(如<session-config><session-timeout>30</session-timeout></session-config>)缩短Session有效期。七、系统层面优化
操作系统和硬件的配置也会影响Tomcat性能:
/etc/sysctl.conf文件,优化网络缓冲区(net.core.somaxconn=65535,增加连接队列长度)、TCP复用(net.ipv4.tcp_tw_reuse=1,快速复用TIME_WAIT连接)、文件句柄数(fs.file-max=65536,增加系统最大文件句柄数)等参数,提升网络和I/O性能。echo never > /sys/kernel/mm/transparent_hugepage/enabled,echo never > /sys/kernel/mm/transparent_hugepage/defrag。