gpt4 book ai didi

go - 如何让 Go 程序使用更多内存?这是推荐的吗?

转载 作者:IT王子 更新时间:2023-10-29 01:56:47 24 4
gpt4 key购买 nike

我正在寻找类似于 Java 中的 -Xmx 的选项,即分配我的 Go 应用程序可以使用的最大运行时内存。正在检查 runtime ,但不完全是这样。

我尝试用 func SetMaxStack() 设置类似的东西,(可能非常愚蠢)

debug.SetMaxStack(5000000000) // bytes
model.ExcelCreator()

我想要这样做的原因是因为目前有足够的 RAM 可用但应用程序不会消耗超过 4-6%,我在这里可能是错的但它可能会迫使 GC 发生很多比需要更快导致性能问题。

我在做什么

从RDBMS系统中获取大数据集,处理后写成excel。

我寻找这样一个选项的另一个原因是限制最终部署它的服务器上 RAM 的最大使用量。

如有任何提示,我们将不胜感激。

最佳答案

当前稳定的 Go (1.10) 只有一个旋钮,可用于通过 Go 运行时执行的垃圾收集来交换内存以降低 CPU 使用率。这个旋钮叫做 GOGC,它的描述是这样的

The GOGC variable sets the initial garbage collection target percentage. A collection is triggered when the ratio of freshly allocated data to live data remaining after the previous collection reaches this percentage. The default is GOGC=100. Setting GOGC=off disables the garbage collector entirely. The runtime/debug package's SetGCPercent function allows changing this percentage at run time. See https://golang.org/pkg/runtime/debug/#SetGCPercent.

因此,基本上将它设置为 200 将使您正在运行的进程的 Go 运行时可能使用的内存量增加一倍。

话虽如此,我注意到 Go 运行时实际上会尝试调整其垃圾收集器的行为以适应您正在运行的程序的工作负载和手头的 CPU 处理能力。我的意思是,通常情况下你的程序不消耗大量 RAM 并没有什么问题——如果收集器恰好以足够快的速度清除垃圾而不会显着影响性能,我认为没有理由担心:Go 的 GC 是运行时微调最激烈的要点之一,事实上,非常效果很好。

因此你可以尝试走另一条路:

  • 分析程序的内存分配。分析配置文件并尝试找出热点位置是,以及是否(以及如何)优化它们。

    你可能会开始 here并继续其他无数 intros对这些东西。

  • 优化。通常这相当于制作某些缓冲区可在对相同函数的不同调用中重复使用消耗它们,预分配 slice 而不是增长它们逐渐地,在认为有用的地方使用 sync.Pool 等。

    这样的措施实际上可能会增加内存真正使用过的(也就是说,被活的对象——而不是垃圾),但它可能会降低 GC 的压力。

关于go - 如何让 Go 程序使用更多内存?这是推荐的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52592951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com