跳转至

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 优化

-Xms4g -Xmx4g            # 堆大小一致,避免动态扩容
-Xss512k                  # 栈大小
-XX:+UseG1GC              # 垃圾回收器
-XX:MaxGCPauseMillis=200

五、其他

  • 关闭 AJP:不用就关,避免 Ghostcat 漏洞。
  • 访问日志异步async="true"
  • 压缩compression="on"
  • 连接复用:Nginx 长连接到 Tomcat。

六、监控指标

  • busy threads / max threads。
  • 请求耗时 P99。
  • GC 时间。
  • 堆内存使用。

面试加分

  • Tomcat 工作流程:Connector 接收连接 -> SocketProcessor -> 线程池 -> Servlet。
  • maxThreads 和 acceptCount 的关系:线程都在忙时,新请求进 acceptCount 队列。