英文:
How to increase heap space in Google Go
问题
我正在运行Rober Hundt的基准测试中的Go代码,以比较Go与其他语言的性能。当我运行该基准测试中的Go代码时(请参见http://code.google.com/p/multi-language-bench/source/browse/trunk/src/#src%2Fhavlak%2Fgo),我遇到了内存不足的异常:
................runtime: out of memory: cannot allocate 1048576-byte block (1270808576 in use)
throw: out of memory
我的问题是如何增加Go的内存空间。是否有一些启动参数或编译器的标志可以相应地设置?Go源代码的Makefile文件没有透露任何信息...
谢谢,Oliver
英文:
I'm running the Go code from Rober Hundt's benchmark to compare performance of Go with the other languages. When I run the Go code from that benchmark (see http://code.google.com/p/multi-language-bench/source/browse/trunk/src/#src%2Fhavlak%2Fgo) I get an out of memory exception:
................runtime: out of memory: cannot allocate 1048576-byte block (1270808576 in use)
throw: out of memory
My question is how I can increase Go's memory space. Is there some start-up parameter or some flag for the compiler that can be set accordingly? The Makefile file of the Go source doesn't reveal anything...
Thanks, Oliver
答案1
得分: 6
如果您分享您的操作系统版本,如果它是32位还是64位,并且您的go version
结果,我们可能可以更好地帮助您。
-
Go的32位版本已知存在堆内存问题,通常不用于生产环境。请确保您在64位平台上使用64位版本的Go。
-
Go的tip版本,即将成为Go 1.1的分支,已将最大堆空间从8GB升级到128GB。我与核心Go开发人员交流过,他们建议在内存密集型生产环境中使用Go tip。
-
在Windows上使用Go的人较少,因此测试也较少,这可能是一个bug。在Linux上,Go经过了更多的尝试和验证,OS X上也有一定程度的尝试和验证。
-
正如peterSO提到的,Robert Hundt的基准测试存在缺陷-在这里阅读更多信息:Profiling Go Programs
英文:
If you share your OS version, if it is 32 vs 64 bits and your go version
result, we can probably help you more.
-
The 32-bit version of Go has known heap memory issues and is generally not used in production. Make sure you are using the 64-bit version of Go on a 64-bit platform.
-
Go tip, the branch of go that will become Go 1.1 has upgraded the maximum heap space from 8 GB to 128 GB. The core Go developers I have spoken with recommend using Go tip for memory intensive production uses.
-
Go on Windows is less used and thus less tested, this could be a bug. Go is much more tried and true on Linux ans to a lesser extent OS X.
-
As peterSO mentioned, Robert Hundt's benchmark is flawed- read more here: Profiling Go Programs
答案2
得分: 4
- 如果您正在运行32位的Go版本,请尝试使用64位版本,并使用最新的修订版本。
- 如果可能的话,请使用*nix平台,它在我看来具有更好的内存管理能力。
英文:
One can only wildly guess - for the lack of more details.
- If you're running a 32 bit Go version, try the 64 bit one instead and use the tip revision.
- If possible, use a *nix platform - it has IMO better memory management.
答案3
得分: 1
Robert Hundt的基准测试有缺陷。它不是Go的有效基准测试。详细信息请阅读Profiling Go Programs。
英文:
Robert Hundt's benchmark is flawed. It's not a valid benchmark for Go. Read Profiling Go Programs for details.
答案4
得分: 0
对于那些可能感兴趣的人,我给亨特先生发了一封邮件,询问是否有一些(未记录的)编译器开关可以调整或参数化堆大小。这是因为我最初错误地认为这样的开关必须存在,但没有记录。而且似乎没有人回复我在这里的帖子,也不知道。我想我在这里受到了JVM工作方式的“太多启发”...
无论如何,他建议尝试不同的编译器(基于gcc的编译器或基于plan-9的编译器),因为其中一个可能比另一个更好。当然,要在64位机器上尝试。
他还指向了一篇关于Go内存管理的好文章:http://lwn.net/Articles/428100/
但是,没有编译器开关可以调整内存设置。
问候,奥利弗
英文:
For those that might be interested I sent a mail to mr. hundt himself asking whether there is some (undocumented) compiler switch with which the heap size could be adapted or parameterized somehow. This was because I first mistakenly assumed that such a switch must exist, but is not documented. And nobody hat replied to my post here seemed to know, either. I guess I was "too much inspired" here by how the jvm works ...
Anyway, he recommended to try different compilers (gcc based compiler, or the plan-9 based compiler) as one might work better than the other. Then try on a 64-bit machine, of course.
He also pointed my to some good article about Go's memory management: http://lwn.net/Articles/428100/
But no, there is no compiler switch to play around with memory settings.
Regards, Oliver
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论