我在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个小时).