美文网首页
go 反向代理 timewait问题排查

go 反向代理 timewait问题排查

作者: 竹羔 | 来源:发表于2021-06-17 19:31 被阅读0次

    背景

    image.png

    如图,在压测一个go写的反向代理服务时出现这个报错。
    经过搜索发现这个报错是因为端口耗尽而导致的。

    原因可能:

    • http.client请求后没读取完rsp.Body就close了。
    • http.Transport 的参数设置有问题。(IdleConnTimeout调高一些,可以设60s,MaxConnsPerHost,MaxIdleConnsPerHost,MaxIdleConns可以调高一些,比如1000),参数具体含义可以看下面的参考链接。

    ps

    如果是服务端出现大量time wait的话,可以调一下linux系统参数。

    sysctl -w net.ipv4.tcp_fin_timeout=30  #修改系統默认的TIMEOUT时间,默认为60s 
    sysctl -w net.ipv4.tcp_timestamps=1    #修改tcp/ip协议配置, 通过配置/proc/sys/net/ipv4/tcp_tw_resue, 默认为0,修改为1,释放TIME_WAIT端口给新连接使用
    sysctl -w net.ipv4.tcp_tw_recycle=1     #修改tcp/ip协议配置,快速回收socket资源,默认为0,修改为1:
    sysctl -w net.ipv4.tcp_tw_reuse = 1     #允许端口重用
    
    

    参考

    核心原理:https://ethantang.top/posts/go-http-keepalive/
    https://studygolang.com/articles/28263
    https://blog.csdn.net/skh2015java/article/details/104467217

    相关文章

      网友评论

          本文标题:go 反向代理 timewait问题排查

          本文链接:https://www.haomeiwen.com/subject/cggcyltx.html