温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java tomcat怎么限制并发

发布时间:2026-09-02 07:54:57 来源:亿速云 阅读:99 作者:小樊 栏目:编程语言

在 Java + Tomcat 环境下,“限制并发”通常可以从 Tomcat 自身配置应用层控制反向代理 / 容器层 三个层面来做。下面按常见场景说明。


一、Tomcat 自身限制并发(最常用)

1. 限制最大连接数(Connector 配置)

conf/server.xml 中配置 <Connector>

<Connector
    port="8080"
    protocol="HTTP/1.1"
    maxThreads="200"
    minSpareThreads="20"
    acceptCount="100"
    maxConnections="1000"
    connectionTimeout="20000" />

关键参数说明:

参数 含义
maxThreads 处理请求的最大线程数(≈最大并发请求数)
minSpareThreads 最小空闲线程数
acceptCount 队列等待长度(超过 maxThreads 后排队)
maxConnections Tomcat 能接受的最大连接数
connectionTimeout 连接超时时间

一般限制并发:调小 maxThreads + acceptCount


2. NIO / NIO2 连接器(推荐)

<Connector
    port="8080"
    protocol="org.apache.coyote.http11.Http11Nio2Protocol"
    maxThreads="200"
    maxConnections="1000" />

二、限制单个接口 / 业务并发(应用层)

1. 使用 Semaphore(最灵活)

private static final Semaphore semaphore = new Semaphore(10);

@GetMapping("/api")
public ResponseEntity<String> api() throws InterruptedException {
    if (!semaphore.tryAcquire()) {
        return ResponseEntity.status(429).body("Too many requests");
    }
    try {
        // 业务逻辑
        return ResponseEntity.ok("success");
    } finally {
        semaphore.release();
    }
}

✅ 适合:接口级并发限制


2. 使用线程池(Executor)

ExecutorService pool = Executors.newFixedThreadPool(10);

或全部请求统一线程池:

<Executor name="tomcatThreadPool"
          namePrefix="catalina-exec-"
          maxThreads="50"
          minSpareThreads="10"/>
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1"/>

三、限流(Rate Limit)

1. 使用 Guava RateLimiter

RateLimiter rateLimiter = RateLimiter.create(100); // 100 QPS

if (!rateLimiter.tryAcquire()) {
    return ResponseEntity.status(429).build();
}

2. 使用过滤器统一限流

@WebFilter("/*")
public class LimitFilter implements Filter {
    private static final Semaphore semaphore = new Semaphore(50);

    public void doFilter(...) {
        if (!semaphore.tryAcquire()) {
            response.setStatus(429);
            return;
        }
        try {
            chain.doFilter(request, response);
        } finally {
            semaphore.release();
        }
    }
}

四、前置层限制(生产推荐)

Nginx 限并发 / 限流

limit_conn_zone $binary_remote_addr zone=conn:10m;
limit_conn conn 10;

limit_req_zone $binary_remote_addr zone=req:10m rate=100r/s;
limit_req zone=req burst=20 nodelay;

✅ 生产环境最稳定方式


五、容器 / 云环境

  • Docker:限制 CPU / 内存
  • K8sresources.limits
  • 网关:Spring Cloud Gateway / Sentinel

六、选择建议

场景 推荐方式
整体并发限制 Tomcat maxThreads
单接口并发 Semaphore
QPS 限制 RateLimiter
生产环境 Nginx + Tomcat
微服务 Sentinel / Gateway

如果你能说下:

  • Tomcat 版本
  • 是限制 总并发 还是 单接口
  • 是否前面有 Nginx / 网关

我可以给你更精确的配置示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI