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

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

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

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

你可以去看看 GopherChina 的一些分享,有大厂的实际数据
mathgl
2016-08-04 23:43:20 +08:00
@fuxiaohei 百度有人分享过 go-lang 应用的例子,好象他们对 go 的 gc 还是不够满意,于是使用了多进程,暴力杀死进程再启动的方式来避免延迟。

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

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

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

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

© 2021 V2EX