如何停止golang gc并手动触发?

时间:2016-08-16 10:04:17

标签: sql go garbage-collection

目前,我支持使用golang编写的数据库进行大表连接。但是gc花费了太多时间。我想关闭go gc并手动触发它。如何配置go build args?

1 个答案:

答案 0 :(得分:20)

runtime的软件包文档包含您需要的所有详细信息:

  

GOGC变量设置初始垃圾回收目标百分比。当新分配的数据与上一次收集后剩余的实时数据的比率达到此百分比时,将触发收集。默认值为GOGC = 100。 设置GOGC = off会完全禁用垃圾收集器。运行时/调试包的SetGCPercent函数允许在运行时更改此百分比。请参阅https://golang.org/pkg/runtime/debug/#SetGCPercent

因此,您可以将环境变量GOGC设置为百分比,即新分配的数据与上一次收集后剩余的实时数据的比率。

当上述数据比率达到GOGC的值时,启动(垃圾)集合。初始设置取自GOGC env变量,如果未设置变量,则为100。值off禁用垃圾回收。

在运行时,您可以通过调用debug.SetGCPercent()更改GOGC比率,传递否定值以禁用它:

debug.SetGCPercent(-1)

您可以使用runtime.GC()“手动”触发垃圾回收。

完全禁用GC可能不是您想要的。阅读runtime的完整软件包文档,您可以在其中找到有关如何微调GC以及如何跟踪GC运行的详细信息。分析它们并采取相应的行动。

另请注意,Go 1.7今天发布了改进的垃圾收集器:

  

由于垃圾收集器的加速和标准库中的优化,程序应该运行得更快一些。与Go 1.6相比,具有许多空闲goroutine的程序将经历更短的垃圾收集暂停。

如果还没有,请先测试使用Go 1.7编译的应用程序,然后再采取进一步措施。