一、连接器(Connector)配置优化
连接器是Tomcat处理HTTP请求的核心组件,其协议选择与参数配置直接影响并发处理能力。
<Connector port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
connectionTimeout="20000" redirectPort="8443" />
maxThreads:最大线程数,即Tomcat同时处理的最大请求数。建议设置为CPU核心数的2-4倍(如16核服务器可设为32-64),避免线程过多导致内存溢出。minSpareThreads:最小空闲线程数,保持一定数量的空闲线程以快速响应新请求,建议设为maxThreads的10%-20%(如maxThreads=100时,设为10-20)。acceptCount:等待队列长度,当所有线程繁忙时,新请求进入队列等待。建议设为maxThreads的1.5-2倍(如maxThreads=100时,设为150-200),避免请求被直接拒绝。connectionTimeout:连接超时时间,默认20秒,可根据业务需求调整为5-30秒,及时释放闲置连接。二、线程池配置优化
线程池是Tomcat处理请求的执行单元,合理的线程池配置能提升资源利用率。
<Executor>标签定义线程池,然后在<Connector>中引用,实现线程池的复用与管理。示例如下:<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="500" minSpareThreads="50" maxIdleTime="60000"
maxQueueSize="1000" />
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="8443" />
参数说明:
maxThreads:线程池最大线程数(同连接器中的maxThreads)。minSpareThreads:线程池保持的最小空闲线程数。maxIdleTime:线程空闲时间(毫秒),超过则销毁,节省资源。maxQueueSize:任务队列容量,避免无限制排队导致内存溢出。三、JVM调优
JVM性能直接影响Tomcat的稳定性和响应速度,需重点关注堆内存与垃圾回收。
export JAVA_OPTS="-Xms4g -Xmx4g -Xmn1.5g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
参数说明:
-Xms:初始堆大小(如4GB)。-Xmx:最大堆大小(与-Xms一致,避免堆内存动态调整带来的性能损耗)。-Xmn:新生代大小(如1.5GB)。-XX:MetaspaceSize:元空间初始大小(如256MB)。-XX:MaxMetaspaceSize:元空间最大大小(如512MB)。export JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
参数说明:-XX:MaxGCPauseMillis:设置最大GC停顿时间目标(如200毫秒)。export JAVA_OPTS="$JAVA_OPTS -XX:+UseParallelGC -XX:ParallelGCThreads=8"
参数说明:-XX:ParallelGCThreads:并行GC线程数(如8核服务器设为8)。四、操作系统内核优化
操作系统层面需调整文件描述符与TCP/IP参数,解决高并发下的资源限制问题。
ulimit -n 65535
/etc/security/limits.conf文件,添加以下内容:* soft nofile 65535
* hard nofile 65535
tomcat soft nofile 65535
tomcat hard nofile 65535
同时修改/etc/sysctl.conf文件,添加以下内容:fs.file-max = 655350
fs.nr_open = 655350
执行sysctl -p使配置生效。echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 4096 > /proc/sys/net/core/somaxconn
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
echo 600 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 30 > /proc/sys/net/ipv4/tcp_keepalive_probes
echo 10 > /proc/sys/net/ipv4/tcp_keepalive_intvl
五、应用层优化
应用代码与缓存策略直接影响Tomcat的负载能力。
maximumPoolSize设为CPU核心数的2-3倍),避免数据库成为瓶颈。StringBuilder代替+),减少内存分配与GC压力;使用异步Servlet处理耗时操作(如文件上传、第三方API调用),避免阻塞线程。六、监控与持续调优
优化后需通过监控工具持续跟踪Tomcat性能,识别新的瓶颈。
maxThreads、优化GC算法)。