【问题标题】:How to increase heap space in Google Go如何在 Google Go 中增加堆空间
【发布时间】:2013-01-11 15:23:12
【问题描述】:

我正在运行 Rober Hundt 的基准测试中的 Go 代码,以比较 Go 与其他语言的性能。当我从该基准运行 Go 代码时(请参阅 http://code.google.com/p/multi-language-bench/source/browse/trunk/src/#src%2Fhavlak%2Fgo),我遇到内存不足异常:

................运行时:内存不足:无法分配 1048576 字节块(1270808576 正在使用中) 抛出:内存不足

我的问题是如何增加 Go 的内存空间。是否有一些可以相应设置的编译器启动参数或标志? Go 源代码的 Makefile 文件没有显示任何内容...

谢谢,奥利弗

【问题讨论】:

    标签: go


    【解决方案1】:

    人们只能疯狂猜测 - 因为缺乏更多细节。

    • 如果您运行的是 32 位 Go 版本,请尝试使用 64 位版本并使用最新版本。
    • 如果可能,请使用 *nix 平台 - 它具有 IMO 更好的内存管理。

    【讨论】:

      【解决方案2】:

      Robert Hundt 的基准测试存在缺陷。它不是 Go 的有效基准。阅读Profiling Go Programs了解详情。

      【讨论】:

      • 感谢您的链接。那很有意思。尽管如此,我仍然感谢有关如何指定更大堆大小的任何提示:-)
      • @Oliver Plow:@jnml 已经告诉你你没有提供足够的细节。你已经忽略了他。你使用的是什么版本的 Go(go version 的输出)?您使用的是什么操作系统版本(uname -a 的输出或等效版本)?您对 Go 专家 (Russ Cox) 编写的代码有疑问吗?
      【解决方案3】:

      如果您分享您的操作系统版本,如果它是 32 位还是 64 位以及您的 go version 结果,我们可能会为您提供更多帮助。

      • 32 位版本的 Go 存在已知的堆内存问题,一般不用于生产。确保您在 64 位平台上使用 64 位版本的 Go。
      • Go 提示,Go 的分支将成为 Go 1.1 has upgraded the maximum heap space from 8 GB to 128 GB。与我交谈过的核心 Go 开发人员建议将 Go tip 用于内存密集型生产用途。
      • Go on Windows 使用较少,因此测试较少,这可能是一个错误。 Go 在 Linux 和 OS X 上的尝试和真实性要多得多。
      • 正如 peterSO 所提到的,Robert Hundt 的基准测试存在缺陷 - 在此处阅读更多信息:Profiling Go Programs

      【讨论】:

      • 我使用的是适用于 Windows 的 32 位版本的 1.0.3 版本。我认为我只需要提供编译器开关的原因是相应的 Java 代码运行到完成没有问题。堆栈大小必须通过 jvm 开关增加,但仅此而已。 Go 程序提前终止。我将在 Windows 64-box 或使用 Go 1.1 的 Linux 上进行尝试。感谢您的提示。似乎 Go 想要分配大的连续内存块,这会导致问题,因为 jvm gc 可以忍受分散的内存空间,因为它不可避免地会分散并为此进行了优化。
      • 根据我的经验,Go 的理想生产环境是在 64 位 Linux 上使用 Go,但只需使用 64 位操作系统(Windows 或具有 1.0.3 或 tip 的 Linux)就可以解决问题你看到了。
      【解决方案4】:

      对于那些可能感兴趣的人,我给先生发了一封邮件。 hunt 自己询问是否有一些(未记录的)编译器开关可以以某种方式调整或参数化堆大小。这是因为我首先错误地认为这样的开关必须存在,但没有记录。在这里回复我的帖子的人似乎也不知道。我想我对 jvm 的工作方式“受到了太多启发”......

      无论如何,他建议尝试不同的编译器(基于 gcc 的编译器或基于 plan-9 的编译器),因为其中一种可能比另一种更好。然后在 64 位机器上试试,当然。

      他还给我指了一些关于 Go 内存管理的好文章:http://lwn.net/Articles/428100/

      但是没有,没有编译器开关可以处理内存设置。

      问候,奥利弗

      【讨论】:

        猜你喜欢
        • 2014-08-17
        • 2016-11-26
        • 2012-01-25
        • 1970-01-01
        • 1970-01-01
        • 2019-01-23
        • 2011-01-14
        • 2012-04-07
        • 1970-01-01
        相关资源
        最近更新 更多