相关: github.com/golang/go/issues/51614
issue 中对应的 pr 目前不是最好方案,个人觉得一些配置项被用户默认配置为 0 时,标准库或者各大框架应该提供一个默认的非 0 值来避免泄露。 如果默认配置存在这种泄露的可能,使用默认配置的服务,不需要 ddos 那么高的打击成本,只要慢连接攻击就可以耗尽 fd 、以及导致大量处理 goroutine 无法退出最终 oom 。 client 端的设备掉电、网络切换、进入电梯信号丢失等,也都会导致 client 端无法发出 TCP.FIN 从而导致这种泄露。
1
victor 2022-03-13 18:07:01 +08:00
顺着你的问题 google 了两篇类似的文章
https://capops.xyz/post/%E8%AE%B0%E4%B8%80%E6%AC%A1http%E8%BF%9E%E6%8E%A5%E9%87%8D%E7%94%A8%E9%97%AE%E9%A2%98%E5%88%86%E6%9E%90/ https://segmentfault.com/a/1190000023635278 我在用 gin 写服务的时候,IdleTimeout 和 ReadTimeout 都不去设置,就是不限制超时时间。超时的控制由 nginx 来管理,遇到问题就想办法从 nginx 那边来优化。 |
2
lesismal OP |
3
victor 2022-03-14 13:44:00 +08:00 1
感谢,之前没注意过这块,顺着你的入手点学到了一些东西。
|