使用默认配置可能导致连接/协程泄露,包括标准库、基于并使用标准库默认配置的框架, fasthttp 也存在类似的问题

2022-03-12 14:15:48 +08:00
 lesismal

相关: github.com/golang/go/issues/51614

issue 中对应的 pr 目前不是最好方案,个人觉得一些配置项被用户默认配置为 0 时,标准库或者各大框架应该提供一个默认的非 0 值来避免泄露。 如果默认配置存在这种泄露的可能,使用默认配置的服务,不需要 ddos 那么高的打击成本,只要慢连接攻击就可以耗尽 fd 、以及导致大量处理 goroutine 无法退出最终 oom 。 client 端的设备掉电、网络切换、进入电梯信号丢失等,也都会导致 client 端无法发出 TCP.FIN 从而导致这种泄露。

2032 次点击
所在节点    Go 编程语言
3 条回复
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 那边来优化。
lesismal
2022-03-13 22:51:46 +08:00
@victor

外层有其他反代、中间件等设施做中转是可以交给其他基础设施处理。

但是 client 直连 go server 的,还是需要注意。比如用 go 做的基础设施
victor
2022-03-14 13:44:00 +08:00
感谢,之前没注意过这块,顺着你的入手点学到了一些东西。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/839860

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX