这里简单记录我对SpringBoot中Tomcat的重要参数的理解。
参数详解
SpringBoot 的核心优势在于其简化配置的特性,它内置了 Tomcat 服务器,极大降低了开发者的部署成本。以 SpringBoot 2.0.x 版本为例,其集成的 Tomcat 版本为 8.5.x,并提供了以下默认配置参数:
server:
tomcat:
threads:
# 最大线程数(默认200)
max: 200
# 最小工作空闲线程数(默认10)
min-spare: 10
# 最大连接数 (默认10000)
max-connections: 10000
# 等待队列长度,默认(100)
accept-count: 100
需要特别说明的是,在实际应用中,最大连接数与最大并发量是两个不同的概念。虽然二者存在关联,但简单地将最大连接数等同于最大并发量是不准确的。连接数反映的是服务器维持的 TCP 连接数量,而并发量则代表系统同时处理请求的能力,后者还受线程池配置、业务处理耗时等多重因素影响。这种区分对于系统性能调优和容量规划具有重要意义。接下来简单地介绍其中参数的意义:
(1)server.tomcat.threads.max(最大线程数)
/**
* Maximum amount of worker threads.
*/
private int max = 200;
在 SpringBoot 的内置 Tomcat 中,每个请求都会分配一个独立线程进行处理,而 最大线程数(默认 200) 决定了服务的并发处理能力。然而,线程本身存在开销,包括内存占用(每个线程约 1MB)和 CPU 上下文切换成本,因此该值不能盲目调高,而应根据服务器 CPU 核心数、内存大小及业务类型(CPU 密集型或 I/O 密集型)合理配置,避免因线程过多导致性能下降或内存溢出(OOM)。
(2)server.tomcat.threads. min-spare(最小工作空闲线程数)
/**
* Minimum Spare Threads.
*/
private int min-spare = 10;
最小工作空闲线程数(minSpareThreads
) 是 Tomcat 线程池的核心参数之一,用于控制即使没有请求处理时,Tomcat 仍保持的最小空闲线程数量(默认值为 10)。它的主要作用是减少频繁创建和销毁线程的开销,确保突发请求到来时能快速响应。如果设置过低,可能导致短时高并发时线程频繁创建,增加延迟;而设置过高则会浪费内存资源。合理的配置应结合系统负载和响应时间要求,通常建议在低并发场景保持默认值,高并发服务可适当提高(如 20~50),但需配合最大线程数综合优化。
(3)server.tomcat.max-connections(最大连接数)
/**
* Maximum number of connections that the server accepts and processes at any
* given time. Once the limit has been reached, the operating system may still
* accept connections based on the "acceptCount" property.
*/
private int maxConnections = 10000;
最大连接数(maxConnections)决定了服务器在任意瞬间能够接受和处理的最大连接数量,默认值为10000 。当并发连接数达到此上限时,新的连接不会被立即拒绝,而是根据 accept Count
参数的设定暂时进入等待队列,由操作系统在 TCP 层维持连接状态,直到服务器有能力处理。需要注意的是,该参数仅控制连接建立的速率,实际并发请求处理能力仍受 maxThreads
(工作线程数)限制。在高并发场景下,建议根据服务器硬件配置和业务负载量合理调整此参数,通常需要配合 acceptCount
和 maxThreads
进行综合优化,以避免连接堆积或资源耗尽的情况。
(4)server.tomcat.threads.accept-count(等待队列长度)
/**
* Maximum queue length for incoming connection requests when all possible request
* processing threads are in use.
*/
private int acceptCount = 100;
acceptCount(等待队列长度)参数 用于设置当Tomcat所有工作线程(由maxThreads定义)都在处理请求时,新到达请求的排队等待数量,默认值为100。当工作线程满载且等待队列未满时,新请求会进入队列等待处理;若等待队列也已满,则新请求将被直接拒绝并返回错误。该参数作为系统应对瞬时流量高峰的最后缓冲层,需要根据业务场景和服务器资源合理设置:过小的队列容易导致请求被过早拒绝,影响用户体验;过大的队列虽能缓冲更多请求,但会增加内存消耗和请求响应延迟,可能引发超时问题。在实际生产环境中,建议结合业务峰值流量、平均请求处理时长和服务器内存容量进行针对性调优。
四者之间的简单关系
(1)当请求到达tomcat时,tomcat会创建线程来处理请求,直到达到 max(最大线程数) 的规定,就不再创建,而平时会维持minSpareThreads数,
确保突发请求到来时能快速响应;
(2)当连接数达到max-connections(最大连接数)后,系统会继续接收连接,在队列中进行排队;
(3)队列的容量由 threads.accept-count(等待队列长度)决定,当队列满了后,后续的请求都会被拒绝。