1 回答
TA贡献1884条经验 获得超4个赞
分析堆栈跟踪,看起来您正试图在此处分配一个太大的切片:db_template.XCludeList.getAllCombinationComplex()
indexdb/db_template.XCludeList.getAllCombinationComplex(0xea4382c480, 0x8, 0x9, 0xe4ec1dc460, 0x4, 0x4, 0x0, 0x0, 0x0)
/home/scmbuild/workspaces_cluster/index/src/indexdb/db_template/db.go:145 +0x371 fp=0xea27f3ca88 sp=0xea27f3c900
这称为runtime.makeslice():
runtime.makeslice(0xa38840, 0x3ecc38680, 0x3ecc38680, 0x0, 0x0, 0x0)
/usr/local/go1.6.2/src/runtime/slice.go:32 +0x165 fp=0xea27f3c900 sp=0xea27f3c8b0
Go 1.6的源代码runtime.makeslice()在这里:slice.go:
func makeslice(t *slicetype, len64, cap64 int64) slice {
...
}
它是用参数调用的:
runtime.makeslice(0xa38840, 0x3ecc38680, 0x3ecc38680, 0x0, 0x0, 0x0)
第二个值是长度,即
0x3ecc38680 = 16857138816
您试图创建一个包含超过 16*10 9 个元素的切片。如果切片的元素类型需要至少 1 个字节(不包括零大小的类型),则大约为 16 GB!这只是一个较低的估计。显然,在 8 GB 可用 RAM 的情况下,此操作无法成功。
另外,请更新您的 Go,1.6.2 已经快 3 年了,不再受支持(甚至没有收到安全补丁)。
- 1 回答
- 0 关注
- 112 浏览
添加回答
举报