Golang: 在分配堆内存之前发生恐慌

huangapple go评论111阅读模式
英文:

Golang: panic before malloc heap initialized

问题

我在我的 arch Vagrant box 的 $GOPATH 中运行了 go build 命令。但是它输出了以下内容:

 runtime: panic before malloc heap initialized
 fatal error: runtime: cannot allocate heap metadata

我的 box 版本是 3.10.9-1-ARCH x86_64,内存为 242M。

为什么我无法在这个 box 中构建 go 文件?

提前感谢。

英文:

I run go build in the $GOPATH of my arch Vagrant box.
But it prints out

 runtime: panic before malloc heap initialized
 fatal error: runtime: cannot allocate heap metadata

And the box is 3.10.9-1-ARCH x86_64, memory 242M.

Why I can't build go files in the box?

Thanks in advance.

答案1

得分: 2

看起来这是由于虚拟内存不足引起的。

$ ulimit -v 242000
$ go build prog.go
运行时错误:在分配堆内存元数据之前发生恐慌
致命错误:运行时错误:无法分配堆元数据

64位的Go语言需要大量的虚拟内存空间,但不一定需要那么多实际内存。

您可以通过为容器分配更多内存来解决此问题。

您还可以尝试调整/proc/sys/vm/overcommit_memory的设置。

如果可能的话,您还可以尝试为容器分配交换空间。

英文:

Looks like this is caused by not enough virtual memory

$ ulimit -v 242000
$ go build prog.go
runtime: panic before malloc heap initialized
fatal error: runtime: cannot allocate heap metadata

64bit go needs lots of virtual memory space but not necessarily that much real memory.

You could fix this by allocating more memory to the container.

You could also play with the setting of /proc/sys/vm/overcommit_memory.

You could also try allocating swap to the container (if possible).

huangapple
  • 本文由 发表于 2013年8月31日 22:40:27
  • 转载请务必保留本文链接:https://go.coder-hub.com/18549324.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定