增加GO中的堆大小

时间:2016-07-19 22:43:26

标签: go garbage-collection

有没有办法如何指示GO运行时使用更大的堆?我正在运行GO 1.5

我的GO流程目前在GC中花费了34%的时间,但它使用了1/3的可用系统内存。

我知道ulimit可用于限制最大堆大小。我已将ulimit设置为~16GB(ulimit -v 17179869184),但堆大小永远不会超过5GB。

使用GODEBUG=gctrace=1我可以看到高GC开销(34%):

20160719-220359.169294 :: gc 665 @5484.983s 34%: 3.3+2504+188+1635+8.0 ms clock, 26+2504+0+26950/3271/3.5+64 ms cpu, 4825->4964->2623 MB, 4948 MB goal, 8 P
20160719-220406.322354 :: gc 666 @5492.411s 34%: 2.9+212+2111+1749+8.3 ms clock, 23+212+0+25010/3496/146+67 ms cpu, 4846->4990->2657 MB, 4970 MB goal, 8 P
20160719-220413.703514 :: gc 667 @5499.452s 34%: 4.4+4411+0.021+0.25+8.4 ms clock, 35+4411+0+29365/0.054/38+67 ms cpu, 4908->5022->2618 MB, 5025 MB goal, 8 P

2 个答案:

答案 0 :(得分:2)

Golang文档介绍了GOGC:

GOGC变量设置初始垃圾收集目标 百分比。当比例为新鲜时触发集合 将数据分配为上一次收集后剩余的实时数据 达到此百分比。默认值为GOGC = 100。设置GOGC = off 完全禁用垃圾收集器。

GOGC有一个最佳值,它取决于运行Go应用程序的应用程序和系统。您可以在此blog和此one中阅读更多内容。

您可以尝试使用不同的值并查看对性能的影响,或者使用Optimizer Studio之类的免费工具来自动找到最佳GOGC值。

答案 1 :(得分:1)

您可以使用gcloud functions deploy <redacted> \ --trigger-http \ --runtime=python37 \ --region=europe-west1 \ --project=<redacted> \ --entry-point=<redacted> 环境变量来控制它。 这是一个百分比:将其设置为200,Go运行时将使用的内存是以前的两倍。

[这被埋在评论中;我将其作为答案可见]

更新:https://github.com/golang/go/issues/23044上将详细讨论各种技术,其中包括“镇流器”技术的提及。

相关问题