如何突破Dart中ServerSocket的1015最大连接数限制?
突破Dart服务器1015最大连接数限制的方案
你遇到的1015连接数上限,并非Dart本身或你的硬件(AMD Ryzen 5500U+8GB内存)的瓶颈,大概率是系统默认的文件描述符限制导致的——Linux系统默认单个进程的软文件描述符限制为1024,每个TCP连接会占用一个文件描述符,所以实际可用连接数会略低于这个值(约1015)。完全可以通过以下步骤突破该限制:
一、调整系统文件描述符限制
1. 临时生效(当前会话)
在终端执行命令,临时提升当前进程的文件描述符上限:
ulimit -n 65535
之后重启你的Dart服务器即可生效,但重启终端后会恢复默认值。
2. 永久生效
编辑系统配置文件,让限制永久生效:
- 打开
/etc/security/limits.conf,添加以下两行:
* soft nofile 65535 * hard nofile 65535
- 打开
/etc/sysctl.conf,添加或修改:
fs.file-max = 655350
- 执行命令让配置生效:
sysctl -p
重启服务器或重新登录后,限制会永久生效。
二、优化Dart服务配置
- 启用多Isolate处理连接:如果你的代码使用
HttpServer.bind,可以设置shared: true,让多个Isolate共同处理连接请求,提升并发能力:
final server = await HttpServer.bind(InternetAddress.anyIPv4, 8080, shared: true);
- 调整HTTP Keep-Alive设置:闲置的Keep-Alive连接会占用文件描述符,可通过缩短超时时间释放资源:
server.keepAliveTimeout = Duration(seconds: 30);
三、其他注意事项
- 你的硬件配置(R5 5500U+8GB内存)完全支撑数万级别的并发连接,只要系统配置到位,无需担心硬件瓶颈。
- 如果使用了反向代理(如Nginx)或防火墙,需同步调整它们的连接数限制,避免成为新的瓶颈。
- 可使用压测工具(如
wrk、ab)验证调整后的连接数上限,确保配置生效。
内容的提问来源于stack exchange,提问作者user15833970
相关产品推荐
相关产品推荐

