1. 调整线程池配置(核心优化项)
Tomcat通过线程池处理并发请求,关键参数包括maxThreads(最大线程数,决定并发处理能力上限)、minSpareThreads(最小空闲线程数,减少线程创建开销)、acceptCount(请求队列长度,应对突发流量)。
maxThreads的10%-20%(如maxThreads=800时,设为80-160),保持一定空闲线程以快速响应突发请求。maxThreads的1.5-2倍(如maxThreads=800时,设为1200-1600),当所有线程繁忙时,新请求进入队列等待,避免直接拒绝连接。server.xml):<Connector port="8080" protocol="HTTP/1.1"
maxThreads="800"
minSpareThreads="80"
acceptCount="1200"
connectionTimeout="20000" />
若使用Tomcat 8.5+,可通过Executor定义线程池并引用,提升配置复用性:
<Executor name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="800"
minSpareThreads="80"
maxIdleTime="60000"/>
<Connector executor="tomcatThreadPool"
port="8080"
protocol="HTTP/1.1"
acceptCount="1200" />
2. 选择高性能连接器(IO模型优化)
Tomcat默认的BIO(阻塞IO)连接器在高并发下性能较差,建议切换至NIO(非阻塞IO)或APR(Apache Portable Runtime,基于本地库的高性能IO)。
protocol设置为org.apache.coyote.http11.Http11NioProtocol。libtcnative),性能更优(尤其适合静态资源处理),配置时将protocol设置为org.apache.coyote.http11.Http11AprProtocol。server.xml):<!-- NIO连接器 -->
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="800"
acceptCount="1200" />
<!-- APR连接器(需提前安装APR库) -->
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="800"
acceptCount="1200" />
3. 优化JVM参数(内存与GC调优)
合理的JVM配置可减少GC停顿时间,提升Tomcat稳定性。
-Xms(初始堆)和-Xmx(最大堆),建议设置为相同值(避免堆扩容带来的性能波动),如-Xms2g -Xmx2g(2GB堆内存)。-XX:+UseG1GC),它支持并发标记和增量回收,可降低停顿时间;若需更严格的停顿控制,可添加-XX:MaxGCPauseMillis=200(设置最大GC停顿时间为200ms)。-XX:MetaspaceSize=256m(初始大小)和-XX:MaxMetaspaceSize=512m(最大大小)。catalina.sh或setenv.sh):export JAVA_OPTS="-Xms2g -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
4. 启用压缩与缓存(减少IO开销)
server.xml或web.xml):<!-- server.xml中配置 -->
<Connector port="8080" ... compression="on"
compressableMimeType="text/html,text/xml,text/plain,text/css,application/javascript" />
Expires或Cache-Control头缓存静态资源(如图片、CSS、JS),减少服务器重复处理请求,配置示例如下(context.xml或web.xml):<Context>
<Resources cachingAllowed="true" cacheMaxSize="100000" />
</Context>
5. 负载均衡与集群(横向扩展)
单台Tomcat实例的并发能力有限,可通过负载均衡将请求分发到多台实例,提升整体并发处理能力。
server 192.168.1.101:8080 weight=1; server 192.168.1.102:8080 weight=1;)。Cluster组件实现会话共享和负载均衡,适合高可用场景(如电商、金融应用)。6. 代码与数据库优化(减少资源竞争)
ReentrantLock替代synchronized);避免死锁(按固定顺序获取锁)。maxPoolSize根据并发需求调整)。7. 监控与持续调优(数据驱动优化)
通过监控工具实时跟踪Tomcat性能指标(如线程池使用率、GC频率、响应时间),根据数据调整配置:
jconsole、jvisualvm)、Prometheus+Grafana(可视化监控)、Arthas(在线诊断)。maxThreads;若GC停顿时间过长,需调整GC策略或增大堆内存;若响应时间过长,需检查数据库查询或代码性能瓶颈。免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。