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

JMeter压测SignalR高并发时连接超时故障排查求助

SignalR负载测试(JMeter)高并发下连接超时问题

我用JMeter做SignalR负载测试,流程为首次发起HTTPS请求,第二次发起WSS请求。线程数设置为100时测试完全正常,但提升至500及以上后,80%的请求失败,报错信息如下:

HTTP /chat请求报错

Thread Name: SignalR 1-788
Sample Start:2024-08-15 17:05:10 EEST
Load time:21042
Connect Time:21042
Latency:0
Size in bytes:2908
Sent bytes:0
Headers size in bytes:0
Body size in bytes:2908
Sample Count:1
Error Count:1
Data type ("text"|"bin"|""):text
Response code:Non HTTP response code: org.apache.http.conn.HttpHostConnectException
Response message:Non HTTP response message: Connect to xxx.azurewebsites.net:443 [xxx.azurewebsites.net/xxx.xxx.0.xxx] failed: Connection timed out: connect

HTTPSampleResult fields:
ContentType: 
DataEncoding: null

WebSocket连接请求报错

Thread Name:SignalR 1-754
Sample Start:2024-08-15 16:38:30 EEST
Load time:21045
Connect Time:0
Latency:0
Size in bytes:0
Sent bytes:0
Headers size in bytes:0
Body size in bytes:0
Sample Count:1
Error Count:1
Data type ("text"|"bin"|""):
Response code:Websocket I/O error
Response message:WebSocket I/O error: Connection timed out: connect

SampleResult fields:
ContentType: 
DataEncoding: null

所有失败请求的Load time均超过20000ms。已将HTTP请求超时、WebSocket连接/读取超时设置为300000ms,尝试过不同网络环境(4-6Mbps WiFi、12-15Mbps WiFi、35-42Mbps 4G热点),关闭防火墙与杀毒软件,增加ramp-up时间,但问题依旧存在。


可能原因及解决方案

1. Azure App Service服务器端连接限制

你使用的Azure App Service对并发连接数有明确的层级限制:

  • 免费/共享层:并发连接数上限极低(通常仅几百)
  • 基本/标准层:每个实例的并发连接数有限制(如标准层单实例默认约1000-2000,具体取决于SKU)
    SignalR本身基于长连接,当并发线程达到500时,很容易触达服务器的连接上限,导致新连接超时。

解决方法:

  • 查看Azure App Service监控指标(Connections、WebSocket Connections),确认是否达到连接上限
  • 升级App Service的SKU,或增加实例数量进行横向扩容
  • 若使用Azure SignalR Service,检查其单元数是否足够支撑当前并发连接需求

2. JMeter客户端系统资源/连接限制

JMeter运行机器存在系统级TCP连接限制:

  • 本地可用端口数量(Windows默认范围16384-65535,约49k,但TIME_WAIT状态的连接会持续占用端口)
  • TCP连接TIME_WAIT超时设置(Windows默认240s,Linux默认60s)
    短时间内创建大量连接会耗尽本地端口,导致无法建立新连接,最终触发超时。

解决方法:

  • 调整系统TCP参数:
    • Windows:修改注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters,将MaxUserPort设为65535,TcpTimedWaitDelay设为30
    • Linux:执行sysctl -w net.ipv4.tcp_tw_reuse=1、sysctl -w net.ipv4.tcp_tw_recycle=1,调整net.ipv4.ip_local_port_range扩大端口范围
  • 采用JMeter分布式运行:用多台机器作为负载生成器,分摊连接压力,避免单台机器资源瓶颈

3. JMeter配置优化不足

即便设置了超时,JMeter默认连接池配置可能无法应对高并发场景:

  • HTTP请求默认连接池大小不足,导致等待获取连接的时间过长
  • WebSocket采样器的连接管理未做针对性优化

解决方法:

  • 在HTTP Request采样器的Advanced标签下,将Max Connections per Host和Max Total Connections设为500以上
  • 确认HTTP Keep-Alive功能处于启用状态
  • 修改JMeter的user.properties文件,调整以下参数:
    httpclient.max_total=2000
    httpclient.max_per_host=500
    

4. SignalR协议额外开销

SignalR的协商、连接过程存在额外HTTP请求,高并发下这些请求会加剧服务器负载,进而导致连接超时。

解决方法:

  • 优先使用SignalR最新协议版本(如WebTransport,需服务器支持),降低连接开销
  • 在JMeter中添加HTTP Cache Manager,缓存协商请求结果,避免重复发起协商请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 15:22:37