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

在生产环境用过的 golang 堆有多大, GC 表现如何?

  •  
  •   ncisoft · 2016-06-01 04:34:48 +08:00 via Android · 2605 次点击
    这是一个创建于 3122 天前的主题,其中的信息可能已经有所发展或是发生改变。
    包括 GC 前后堆的内存占用大小, GC 用时, GC 进行时对性能和服务 sla 的影响
    17 条回复    2016-08-04 23:43:20 +08:00
    xiamx
        1
    xiamx  
       2016-06-01 06:56:33 +08:00
    一般 SLA 都是说在 99%的情况下, 200ms 内响应这类的
    loading
        2
    loading  
       2016-06-01 07:32:44 +08:00 via Android
    如果怕 gc 影响,可以看看百度(?)的方案。
    ncisoft
        3
    ncisoft  
    OP
       2016-06-01 07:39:54 +08:00 via Android
    @loading 百度方案可否提供进一步的资料,比如链接
    mengzhuo
        4
    mengzhuo  
       2016-06-01 07:44:57 +08:00 via iPhone
    优化得好的话一般 gc 在 100ms 以下
    sla 除了要升级或者重大 bug 要不然不会有影响
    ncisoft
        5
    ncisoft  
    OP
       2016-06-01 07:49:29 +08:00 via Android
    @mengzhuo 不谈堆多大,光说 GC 时间没什么意义吧, JAVA mini GC 时间也很短,然并卵,一到 full GC 就都是渣
    mengzhuo
        6
    mengzhuo  
       2016-06-01 07:55:31 +08:00 via iPhone
    @ncisoft 不说应用场景和请求量 你觉得你问题合格么?
    golang gc 就是 stw 的 你不了解的东西就一票否决?
    ncisoft
        7
    ncisoft  
    OP
       2016-06-01 08:02:20 +08:00 via Android
    @mengzhuo 我一票否决啥了?我又没用过 golang ,怎么提应用场景和请求量
    qgy18
        8
    qgy18  
       2016-06-01 08:10:22 +08:00 via iPhone   ❤️ 1
    mengzhuo
        9
    mengzhuo  
       2016-06-01 08:15:07 +08:00 via iPhone
    @ncisoft
    连应用场景都没有那你问个啥?浪费我铜币。
    有时间发贴
    不如看看自己是不是写得不好有内存泄漏吧
    ncisoft
        10
    ncisoft  
    OP
       2016-06-01 08:16:24 +08:00 via Android
    @qgy18 谢谢分享,百度的方法挺有趣的
    ncisoft
        11
    ncisoft  
    OP
       2016-06-01 08:19:12 +08:00 via Android
    @mengzhuo 我没写过一行 golang ,哪来的内存泄露? JAVA/C 我倒写过不少。我一票否决啥了?这个问题你是要回避了么
    me820
        12
    me820  
       2016-06-01 08:30:37 +08:00
    在跑推送环境,长期有单服务器 10k 链接要维持,没有发现 GC 影响了什么。
    反倒是自己写的 map 的容易内存溢出,目测 GC 的回收次数非常少(runtime 的情况)。
    janxin
        13
    janxin  
       2016-06-01 08:33:09 +08:00 via iPhone
    关键你还是要给具体的参数,比如连接数多少?长链接短连接?等等,要不然 gc 也没法告诉你需要停留多少,消耗多少堆。一般来说 gc 时间与对象正相关,堆大小也是。技巧上一些情况可以 0 alloc ,所以你不说清楚这个问题没有答案的
    fuxiaohei
        14
    fuxiaohei  
       2016-06-01 09:18:08 +08:00   ❤️ 3
    我这边的数据,单服务器最高 10k 长链接,内存占用 3-6G 波动, GC 时间 10-50ms

    Golang 的 GC 现在都是 background goroutine 执行了,真正 STW 的时间很短。

    除非是百度那种日均十亿以上级别的服务, GC 不会对程序性能有明显的影响。
    ncisoft
        15
    ncisoft  
    OP
       2016-06-01 09:21:45 +08:00 via Android
    @fuxiaohei 这个实际数据很有参考价值,非常感谢
    fuxiaohei
        16
    fuxiaohei  
       2016-06-01 09:26:51 +08:00
    @ncisoft 我的程序还没经过深度优化,只是简单的处理了一些占用 cpu 和内存的点,并不是高效的。但是业务量有限所以没有进一步优化需求。

    你可以去看看 GopherChina 的一些分享,有大厂的实际数据
    mathgl
        17
    mathgl  
       2016-08-04 23:43:20 +08:00
    @fuxiaohei 百度有人分享过 go-lang 应用的例子,好象他们对 go 的 gc 还是不够满意,于是使用了多进程,暴力杀死进程再启动的方式来避免延迟。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3389 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 589ms · UTC 11:16 · PVG 19:16 · LAX 03:16 · JFK 06:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.