在 Java + Tomcat 环境下,“限制并发”通常可以从 Tomcat 自身配置、应用层控制、反向代理 / 容器层 三个层面来做。下面按常见场景说明。
在 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
<Connector
port="8080"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
maxThreads="200"
maxConnections="1000" />
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();
}
}
✅ 适合:接口级并发限制
ExecutorService pool = Executors.newFixedThreadPool(10);
或全部请求统一线程池:
<Executor name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="50"
minSpareThreads="10"/>
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1"/>
RateLimiter rateLimiter = RateLimiter.create(100); // 100 QPS
if (!rateLimiter.tryAcquire()) {
return ResponseEntity.status(429).build();
}
@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();
}
}
}
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;
✅ 生产环境最稳定方式
resources.limits| 场景 | 推荐方式 |
|---|---|
| 整体并发限制 | Tomcat maxThreads |
| 单接口并发 | Semaphore |
| QPS 限制 | RateLimiter |
| 生产环境 | Nginx + Tomcat |
| 微服务 | Sentinel / Gateway |
如果你能说下:
我可以给你更精确的配置示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。