You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot WebFlux流式端点并发连接数受限的原因及扩容方法

问题原因及解决方案

问题原因

这个问题的核心是Netty事件循环线程池被长连接占满。

Spring Boot WebFlux默认使用Netty作为底层服务器,默认的Netty Worker线程数为CPU核心数 × 2(比如4核CPU对应8个Worker线程),加上1个Boss线程,总共9个线程。你的流式端点会创建长连接,每个连接的持续数据推送操作默认在Netty事件循环线程上执行,当9个连接耗尽所有事件循环线程后,新的请求(包括流式连接和简单的Hello World请求)就没有线程可以处理,导致无响应。关闭一个连接后,线程被释放,新请求才能得到处理。

解决方法

1. 增加Netty Worker线程数

通过配置文件调整Worker线程数,根据服务器CPU核心数和预期连接数设置合适的值:

# application.properties
server.netty.worker-count=16
# application.yml
server:
  netty:
    worker-count: 16

该配置直接扩充Netty事件循环线程池大小,能容纳更多长连接。

2. 将流式任务切换到独立线程池

避免长连接占用Netty事件循环线程,把Flux的定时推送逻辑切换到独立调度器执行,让Netty线程仅负责IO操作:

修改流式端点代码:

import reactor.core.scheduler.Schedulers

@GetMapping("/stream")
fun stream(): Flux<String> {
    return Flux.interval(Duration.ofSeconds(1))
        .map { a: Long -> "returning $a" }
        .publishOn(Schedulers.boundedElastic()) // 切换到弹性线程池执行推送逻辑
}

Schedulers.boundedElastic()适合处理长时间运行的任务,会根据需求动态创建线程,同时限制最大线程数避免资源耗尽。你也可以自定义线程池实现更精细的资源控制。

3. 检查并调整Netty最大连接数(可选)

默认情况下Netty的最大连接数为无限制(server.netty.max-connections=-1),如果环境有特殊配置,可按需调整:

# application.properties
server.netty.max-connections=100

该配置设置服务器能接受的最大连接数,根据业务需求调整即可。

内容的提问来源于stack exchange,提问作者not_john

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 00:53:10