Golang Go语言在生产环境用过的堆有多大,GC表现如何?

发布于 1周前 作者 wuwangju 来自 Go语言

包括 GC 前后堆的内存占用大小, GC 用时, GC 进行时对性能和服务 sla 的影响
Golang Go语言在生产环境用过的堆有多大,GC表现如何?

18 回复

一般 SLA 都是说在 99%的情况下, 200ms 内响应这类的

更多关于Golang Go语言在生产环境用过的堆有多大,GC表现如何?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


如果怕 gc 影响,可以看看百度(?)的方案。

百度方案可否提供进一步的资料,比如链接

优化得好的话一般 gc 在 100ms 以下
sla 除了要升级或者重大 bug 要不然不会有影响

不谈堆多大,光说 GC 时间没什么意义吧, JAVA mini GC 时间也很短,然并卵,一到 full GC 就都是渣

不说应用场景和请求量 你觉得你问题合格么?
golang gc 就是 stw 的 你不了解的东西就一票否决?

我一票否决啥了?我又没用过 golang ,怎么提应用场景和请求量


连应用场景都没有那你问个啥?浪费我铜币。
有时间发贴
不如看看自己是不是写得不好有内存泄漏吧

谢谢分享,百度的方法挺有趣的

我没写过一行 golang ,哪来的内存泄露? JAVA/C 我倒写过不少。我一票否决啥了?这个问题你是要回避了么

在跑推送环境,长期有单服务器 10k 链接要维持,没有发现 GC 影响了什么。
反倒是自己写的 map 的容易内存溢出,目测 GC 的回收次数非常少(runtime 的情况)。

关键你还是要给具体的参数,比如连接数多少?长链接短连接?等等,要不然 gc 也没法告诉你需要停留多少,消耗多少堆。一般来说 gc 时间与对象正相关,堆大小也是。技巧上一些情况可以 0 alloc ,所以你不说清楚这个问题没有答案的

我这边的数据,单服务器最高 10k 长链接,内存占用 3-6G 波动, GC 时间 10-50ms

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

除非是百度那种日均十亿以上级别的服务, GC 不会对程序性能有明显的影响。

这个实际数据很有参考价值,非常感谢

我的程序还没经过深度优化,只是简单的处理了一些占用 cpu 和内存的点,并不是高效的。但是业务量有限所以没有进一步优化需求。

你可以去看看 GopherChina 的一些分享,有大厂的实际数据

百度有人分享过 go-lang 应用的例子,好象他们对 go 的 gc 还是不够满意,于是使用了多进程,暴力杀死进程再启动的方式来避免延迟。

关于Golang(Go语言)在生产环境中使用的堆大小以及垃圾回收(GC)表现,这通常取决于多个因素,包括应用的负载、并发级别、数据结构的使用等。

在生产环境中,Go语言的堆大小可以动态增长和缩减,以适应应用的内存需求。Go语言的运行时会自动管理内存,包括分配和释放堆内存。

至于GC表现,Go语言的GC机制是并发和并行的,这意味着它可以在后台运行,同时尽量不阻塞用户程序的执行。这种设计使得Go语言在性能上有很大的优势,特别是在高并发场景下。然而,GC的性能也取决于具体的应用场景和配置。例如,如果应用产生了大量的短命对象,那么GC可能会更加频繁地运行,从而增加一些开销。

为了优化GC性能,可以调整Go语言的GC参数,如GOGC环境变量,以控制GC触发的频率和堆增长的速度。此外,还可以通过监控和分析工具来观察GC的行为,并根据实际情况进行调整。

总的来说,Go语言在生产环境中的堆大小和GC表现是动态变化的,需要根据具体的应用场景和需求进行优化和调整。

回到顶部