温馨提示×

debian tomcat如何限流配置

小樊
43
2026-09-09 12:11:51
栏目: 智能运维

在 Debian 上运行的 Tomcat 可以通过多种层面做限流(节流/并发控制),下面按常用程度和实践可行性给你一个清晰清单。


一、Tomcat 自身限流(最推荐,先在这里做)

1️⃣ Connector 并发连接限制(最核心)

编辑:

/etc/tomcat9/server.xml   # 或 tomcat8 / tomcat10

示例(NIO):

<Connector
    port="8080"
    protocol="org.apache.coyote.http11.Http11NioProtocol"
    maxThreads="200"
    acceptCount="100"
    maxConnections="10000"
    connectionTimeout="20000"
/>

参数说明:

参数 作用
maxThreads 最大并发处理线程(≈并发请求数)
acceptCount 队列长度(超过 maxThreads 后排队)
maxConnections 最大连接数
connectionTimeout 连接超时(防慢连接拖死)

✅ 这是最重要的限流点


2️⃣ 限制单个 IP 连接数(防刷)

Tomcat 8.5+ 支持 RemoteAddrValve:

<Valve className="org.apache.catalina.valves.RemoteAddrValve"
       allow=".*"
       deny=""
       maxConnectionsPerIP="20"/>

或配合:

<Valve className="org.apache.catalina.valves.RemoteIpValve"/>

⚠️ 更推荐用 前端 Nginx 做 IP 限流(见下)


二、Nginx + Tomcat(生产环境强烈推荐)

如果你前面有 Nginx:

1️⃣ 限制请求速率(QPS)

http {
    limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;

    server {
        location / {
            limit_req zone=req_limit burst=20 nodelay;
            proxy_pass http://127.0.0.1:8080;
        }
    }
}

2️⃣ 限制连接数

limit_conn_zone $binary_remote_addr zone=conn_limit:10m;

location / {
    limit_conn conn_limit 10;
}

✅ Nginx 限流比 Tomcat 高效得多


三、应用层限流(代码级)

适合:

  • 登录接口
  • 支付接口
  • 短信发送

示例(Spring Boot)

@RateLimiter(permits = 5, timeUnit = TimeUnit.SECONDS)

或:

  • Guava RateLimiter
  • Sentinel
  • Resilience4j

四、系统层限流(兜底)

1️⃣ iptables 限制连接速率

iptables -A INPUT -p tcp --dport 8080 -m limit --limit 20/s -j ACCEPT

2️⃣ 系统文件描述符

ulimit -n 65535

五、推荐组合(最佳实践 ✅)

场景 推荐方案
普通 Web Tomcat maxThreads + Nginx limit_req
API 服务 Nginx + 应用层限流
防御 CC Nginx + iptables
高并发 Nginx → Tomcat 集群

六、如果你愿意,我可以进一步帮你

你可以告诉我:

  1. Tomcat 版本(8 / 9 / 10)
  2. 是否前面有 Nginx
  3. 限流目标(QPS / 连接数 / 单 IP)
  4. 是防 CC 还是保护接口

我可以直接给你 可复制的配置文件。

0 踩