如何维持10k活跃WebSocket连接并防止断开?(分布式测试场景)
WebSocket高活跃连接维持优化方案
针对你维持10k活跃WebSocket连接时出现断开的问题,结合现有测试结构,可从以下方向优化:
排查VM资源瓶颈
检查3台VM的CPU、内存使用率,以及系统文件句柄限制:- Linux系统默认文件句柄上限(
ulimit -n)通常较低,需调至至少65535——每个WebSocket连接会占用一个文件句柄,上限不足会直接导致连接失败或断开。 - 若单台VM线程数过多引发CPU上下文切换频繁,需调整线程组分配,让3台VM的连接数尽量平均,避免单台过载。
- Linux系统默认文件句柄上限(
优化Ping/Pong机制
- 调整Ping发送间隔,确保小于服务端的连接超时时间(比如服务端超时设为60秒,Ping间隔就设为45秒),防止服务端因超时主动断开连接。
- 添加Pong响应超时判断:若发送Ping后超过指定时间未收到Pong,立即触发重连逻辑,避免无效连接占用资源。
- 避免全局批量Ping,改为每个连接独立维护Ping周期,防止同时发送Ping导致的流量突增引发服务端限流。
调整测试结构
- 将连接初始化(open connection、connect、subscribe events)移至Setup Thread Group,专门负责连接创建;维持连接的Ping/Pong逻辑放在普通线程组,分离初始化和保活逻辑,提升测试稳定性。
- 替换Loop Controller中的Flow Control Action,改用JSR223 Sampler编写自定义定时逻辑,精准控制每个连接的Ping间隔,避免统一暂停导致的同步流量冲击。
调优TCP内核参数
修改VM的TCP内核参数,提升连接处理能力:net.ipv4.tcp_tw_reuse = 1:允许复用TIME_WAIT状态的套接字,减少资源占用net.ipv4.tcp_fin_timeout = 30:缩短FIN_WAIT2状态的超时时间net.core.somaxconn = 65535:增大TCP监听队列上限,避免连接被拒绝
协同排查服务端限制
联系DevOps团队确认服务端的WebSocket配置:- 是否存在最大连接数阈值,若有需调整至满足10k+连接的需求
- 服务端的连接超时、空闲断开逻辑是否合理,是否因资源不足主动踢除连接
- 查看服务端的CPU、内存、网络监控,确认是否因服务端过载导致连接断开
均衡分布式测试负载
检查3台VM的活跃连接数分布,确保每台负载均匀。若某台连接数过多,调整对应VM的线程组线程数,让每台维持3500左右的连接(留一定余量),避免单台资源耗尽。
内容的提问来源于stack exchange,提问作者Mzee Bakari
相关产品推荐
相关产品推荐

