增加 GO 中的堆大小

Ale*_*leš 8 garbage-collection go

有没有办法指示 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
Run Code Online (Sandbox Code Playgroud)

Bry*_*yan 5

您可以使用GOGC环境变量来控制它。它是一个百分比:将其设置为 200,Go 运行时将使用以前两倍的内存。

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

更新:https: //github.com/golang/go/issues/23044对不同技术进行了详细讨论,包括提到“镇流器”技术。