我在Kubernetes的豆荚里运行一个围棋程序,这个应用程序有cgo次使用.pod 崩溃,有时有回溯,有时没有.

当有回溯时,它指向GC任务:

error: bad use of bucket.mp
error: non in-use span in unswept list
morestack on g0
error: non in-use span in unswept list
error: span set block with unpopped elements found in reset

设置GODEBUG=cgocheck=2(对从Go-gt;c传递的指针进行缓慢而严格的有效性判断)不会导致捕获无效的指针传递.设置GODEBUG=invalidptr=0以防止垃圾回收器在无效指针上出现panic 会导致应用程序在没有堆栈跟踪的情况下以独占方式崩溃.

我似乎有两个问题--第一个是在GO的GC判断中结束的无效指针(来自某个地方).在使用GODEBUG=invalidptr=0调查其他问题时,可以缓解这一问题.如果围棋程序在没有堆栈跟踪的情况下崩溃,这意味着什么?这可能是Go代码导致的吗,或者这是否表明c代码中存在问题?

编辑(其他数据):

这些崩溃只在Scratch Pod中发生(使用MUSL编译器),并且在几分钟内发生.如果我使用默认的CC编译二进制文件,并在Pod中的Debian容器中运行,程序能够在不崩溃的情况下运行(这种情况已经持续了3个小时).

推荐答案

我加入了地鼠 slack ,并发布了这个堆栈溢出链接.有人指出,作为交叉编译器,musl并不是musl%兼容的.使用默认的交叉编译器构建静态链接的二进制文件解决了所有崩溃问题.

Go相关问答推荐

无法找到与golang、nginx和postquist进行的docker-compose./主要

Go -SDP服务器读缓冲区不会更改任何内容

如何使用Gorilla WebSockets实现Http.Hijacker&;alexedwards/scs/v2

Golang文本/模板序列范围

如何在围棋中从多部分.Part中获取多部分.文件而不保存到磁盘?

Golang telegram 机器人

Golang chromedp Dockerfile

linter 警告:返回值被忽略

Yocto 无法交叉编译 GoLang Wails 应用程序

创建新对象后如何返回嵌套实体?

使用 Golang 在字符串中循环重复数据

从 Makefile 运行时权限被拒绝

Golang 工作池实现意外工作

即使一个测试用例失败,如何运行所有测试用例

使用 Go 读取 TOML 文件时结果为空

如何在golang中使用ozzo验证进行时间最大验证

Terraform 自定义提供程序 - 数据源架构

Dynamodb.ScanInput - 不能使用expr.Names()(类型 map[string]*string)作为类型 map[string]string

try 执行`go test ./... -v`时,Golang中有没有办法设置标志

如何在程序退出时使用 golang 删除文件?