Tomcat 性能优化方案(美团)¶
一、优化方向¶
- 连接器参数。
- 线程池。
- JVM。
- 业务代码。
二、连接器 Connector¶
1. 协议¶
- HTTP/1.1 NIO(默认):非阻塞,适合高并发。
- APR:本地库,更高性能,但要装依赖。
- 不建议 BIO(阻塞)。
2. 关键参数¶
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="500"
minSpareThreads="50"
acceptCount="1000"
connectionTimeout="20000"
keepAliveTimeout="15000"
maxConnections="10000"/>
| 参数 | 作用 |
|---|---|
| maxThreads | 最大工作线程 |
| minSpareThreads | 最小空闲线程 |
| acceptCount | 等待队列长度 |
| maxConnections | 最大连接数 |
三、线程池¶
Tomcat 用线程池处理请求。调大 maxThreads 不是越大越好:
- 太多线程,上下文切换开销大。
- IO 密集型可以多些(几百~几千)。
- CPU 密集型 = CPU 核数 + 1。
四、JVM 优化¶
五、其他¶
- 关闭 AJP:不用就关,避免 Ghostcat 漏洞。
- 访问日志异步:
async="true"。 - 压缩:
compression="on"。 - 连接复用:Nginx 长连接到 Tomcat。
六、监控指标¶
- busy threads / max threads。
- 请求耗时 P99。
- GC 时间。
- 堆内存使用。
面试加分
- Tomcat 工作流程:Connector 接收连接 -> SocketProcessor -> 线程池 -> Servlet。
- maxThreads 和 acceptCount 的关系:线程都在忙时,新请求进 acceptCount 队列。