V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
lesismal
V2EX  ›  Go 编程语言

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

  •  
  •   lesismal ·
    lesismal · 2022-03-12 14:15:48 +08:00 · 1752 次点击
    这是一个创建于 747 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    3 条回复    2022-03-14 13:44:00 +08:00
    victor
        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 那边来优化。
    lesismal
        2
    lesismal  
    OP
       2022-03-13 22:51:46 +08:00
    @victor

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

    但是 client 直连 go server 的,还是需要注意。比如用 go 做的基础设施
    victor
        3
    victor  
       2022-03-14 13:44:00 +08:00   ❤️ 1
    感谢,之前没注意过这块,顺着你的入手点学到了一些东西。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1039 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 22:36 · PVG 06:36 · LAX 15:36 · JFK 18:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.