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

使用Promise.allSettled压测JSON API 后续请求拒绝率升高原因

根因分析

你遇到的是Windows系统TCP临时端口耗尽问题(对应报错中的OS error 10048),既不是代码逻辑错误,也不是常规连接池限制:

  • 每次发起HTTP请求时,系统会为客户端分配一个独立的临时端口,请求结束后端口不会立刻释放,会进入TIME_WAIT状态等待回收,Windows默认回收周期为2分钟。
  • 你连续多次一次性发起3000个并行请求,短时间内占满了系统默认的临时端口池(默认范围为49152-65535,总计约1.6万个可用端口),新请求无法分配端口就会触发报错。
  • 等待一段时间后端口被系统回收,因此再次运行压测可以恢复正常,完全匹配你观测到的现象。
解决方案
  • 限制并发数量:不要一次性发起所有3000个请求,实现并发控制池,将同时运行的请求数限制在200-500区间,已完成的请求释放资源后再补充新的请求,避免短时间占用过多端口。
  • 复用TCP连接:Deno的fetch请求默认支持HTTP keep-alive,你可以在fetch参数中开启强制连接复用,相同域名的请求共享同一个TCP连接,大幅减少端口占用:
    fetch('http://localhost:80/api/v1/index.json', { keepalive: true })
    
  • 调整系统配置(仅适用于专用压测机器):可以通过Windows命令扩大临时端口范围、缩短TIME_WAIT回收周期:
    # 扩大临时端口范围到1024-65535
    netsh int ipv4 set dynamicport tcp start=1024 num=64511
    # 开启TCP时间戳支持快速回收TIME_WAIT端口
    netsh int ipv4 set tcpglobal timestamps=enabled
    
  • 使用成熟压测工具:如果不需要自定义逻辑,直接使用ab、k6等专业压测工具,自带并发控制、连接复用能力,无需手动处理底层网络问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:51:03