- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在寻找类似于 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 isGOGC=100
. SettingGOGC=off
disables the garbage collector entirely. Theruntime/debug
package'sSetGCPercent
function allows changing this percentage at run time. See https://golang.org/pkg/runtime/debug/#SetGCPercent.
因此,基本上将它设置为 200
将使您正在运行的进程的 Go 运行时可能使用的内存量增加一倍。
话虽如此,我注意到 Go 运行时实际上会尝试调整其垃圾收集器的行为以适应您正在运行的程序的工作负载和手头的 CPU 处理能力。我的意思是,通常情况下你的程序不消耗大量 RAM 并没有什么问题——如果收集器恰好以足够快的速度清除垃圾而不会显着影响性能,我认为没有理由担心:Go 的 GC 是运行时微调最激烈的要点之一,事实上,非常效果很好。
因此你可以尝试走另一条路:
关于go - 如何让 Go 程序使用更多内存?这是推荐的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52592951/
我是一名优秀的程序员,十分优秀!