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

fasthttp高并发请求运行一段时间后出现TCP拨号i/o超时问题

fasthttp高并发客户端累计15000次请求后大量超时问题

核心故障表现

使用valyala/fasthttp开发高并发HTTP客户端时,前15000次左右请求运行完全正常,后续请求阶段会出现越来越多的两类报错:

  • dial tcp4 127.0.0.1:80: i/o timeout
  • dialing to the given TCP address timed out

复现代码

var Finished = 0
var Failed = 0
var Success = 0

func main() {
	for i := 0; i < 1000; i++ {
		go get()
	}
	start := time.Now().Unix()
	for {
		fmt.Printf("Rate: %.2f/s Success: %d, Failed: %d\n", float64(Success)/float64(time.Now().Unix()-start), Success, Failed)
		time.Sleep(100 * time.Millisecond)
	}
}

func get() {
	ticker := time.NewTicker(time.Duration(100+rand.Intn(2900)) * time.Millisecond)
	defer ticker.Stop()
	client := &fasthttp.Client{
		MaxConnsPerHost: 10000,
	}
	for {
		req := &fasthttp.Request{}
		req.SetRequestURI("http://127.0.0.1:80/require?number=10")
		req.Header.SetMethod(fasthttp.MethodGet)
		req.Header.SetConnectionClose()
		res := &fasthttp.Response{}
		err := client.DoTimeout(req, res, 5*time.Second)
		if err != nil {
			fmt.Println(err.Error())
			Failed++
		} else {
			Success++
		}
		Finished++
		client.CloseIdleConnections()
		<-ticker.C
	}
}

故障排查背景

  • 服务端基于labstack/echo/v4搭建,客户端出现超时错误时,服务端无任何异常日志;使用Postman、Chrome浏览器等工具手动发起请求,服务端均可正常响应。
  • 客户端前15000次请求运行状态稳定,15000次阈值后超时错误出现频率逐步升高,控制台输出的请求处理速率(Rate)持续下降。已检索Google、GitHub相关公开资料,找到同场景问题记录,但未找到可落地的解决方案。

附加疑问

客户端启动初期会先抛出若干如下报错:

the server closed connection before returning the first response byte. Make sure the server returns 'Connection: close' response header before closing the connection

该报错出现一段时间后客户端运行状态会恢复正常,直到请求量累计到15000次左右才开始逐步出现大量超时错误,需要明确启动初期出现该连接关闭报错的根本原因。

运行环境

  • 硬件:2021款14英寸Macbook Pro(Apple M1 Pro芯片),16GB内存
  • 系统:macOS Monterey 12.4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:27:15