首页 > 解决方案 > 如何将 Go 的 GC CPU 使用率提高到 25% 以上?

问题描述

根据一些文章(like thisthis),G​​o 的垃圾收集器最多只能占用 25% 的可用 CPU,而且看起来这个数字实际上是 golang 开发人员辛勤工作的结果——他们正在努力使这个数字相当小。

但是,因为在我的情况下,我想在特定时间(按runtime.GC())运行 GC,并且我还希望 GC 尽快完成,我想知道是否有可能让 Go 的 GC 使用 100% 的可用 CPU,以便 GC 更早完成。

这可能吗?

语境

我的代码具有确定的繁忙和空闲时间。由于繁忙的部分应该运行得非常快(如果触发 GC,它太慢了),我想在空闲时间内运行 GC,空闲时间也相对较短,因此 GC 也应该运行得快。我不会使用非 GC 语言,因为不需要硬实时,而且我也不太聪明,无法正确管理内存。

标签: gogarbage-collection

解决方案


我找到了。如果我设置GODEBUG=gcstoptheworld=1or GODEBUG=gcstoptheworld=2,那么手动 GC 会利用所有可用的 CPU,尽管这显然会禁用并发 GC。参考:https ://golang.org/pkg/runtime/

就我而言,这就足够了。但我实际上想知道在并发 GC 工作时如何利用更多 CPU。似乎简单地增加值 gcGoalUtilizationgcBackgroundUtilizationruntime/mgc.go源头构建是行不通的。唔...

编辑

这无疑实现了更好的 CPU 利用率,但实际上我看不到明显的加速(根据go tool trace)。也许我错过了一些东西。


推荐阅读