背景
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
网友评论