在CI上运行go测试时,SIGBUS错误代码=0x2

在CI上运行go测试时,SIGBUS错误代码=0x2,go,drone,sigbus,go-testing,Go,Drone,Sigbus,Go Testing,我不确定什么是解释这一点的最佳方式,但我们不断观察到我们的CI因SIGBUS问题而失败。错误看起来很严重 内部去,我们是无知的 为了解决这个错误,我们在本地机器上多次运行测试用例。但每次我们的测试通过,我们都没有看到SIGBUS问题 它只发生在CI框上的随机测试文件上 相关堆栈跟踪: # github.com/magna5/cdr_archiver/transport/nats/nats_test.test unexpected fault address 0x7f56f7744000 fata

我不确定什么是解释这一点的最佳方式,但我们不断观察到我们的CI因SIGBUS问题而失败。错误看起来很严重 内部去,我们是无知的

为了解决这个错误,我们在本地机器上多次运行测试用例。但每次我们的测试通过,我们都没有看到SIGBUS问题

它只发生在CI框上的随机测试文件上

相关堆栈跟踪:

# github.com/magna5/cdr_archiver/transport/nats/nats_test.test
unexpected fault address 0x7f56f7744000
fatal error: fault
[signal SIGBUS: bus error code=0x2 addr=0x7f56f7744000 pc=0x45bbbf]

goroutine 1 [running]:
runtime.throw(0x690ec5, 0x5)
    /usr/local/go/src/runtime/panic.go:774 +0x72 fp=0xc00072cef0 sp=0xc00072cec0 pc=0x42dc32
runtime.sigpanic()
    /usr/local/go/src/runtime/signal_unix.go:391 +0x455 fp=0xc00072cf20 sp=0xc00072cef0 pc=0x442bd5
runtime.memmove(0x7f56f7588d80, 0xc006cae000, 0x2b23e4)
    /usr/local/go/src/runtime/memmove_amd64.s:423 +0x50f fp=0xc00072cf28 sp=0xc00072cf20 pc=0x45bbbf
cmd/link/internal/ld.(*OutBuf).Write(0xc000076040, 0xc006cae000, 0x2b23e4, 0x2c8132, 0x200, 0x10, 0x0)
    /usr/local/go/src/cmd/link/internal/ld/outbuf.go:65 +0xa0 fp=0xc00072cf78 sp=0xc00072cf28 pc=0x5ac5c0
cmd/link/internal/ld.(*OutBuf).WriteSym(0xc000076040, 0xc0058c6140)
    /usr/local/go/src/cmd/link/internal/ld/outbuf.go:159 +0x6c fp=0xc00072cfc8 sp=0xc00072cf78 pc=0x5acd8c
cmd/link/internal/ld.blk(0xc000076040, 0xc005b14000, 0xa23d, 0xc800, 0xb60d80, 0x483164, 0x877200, 0x200, 0x200)
    /usr/local/go/src/cmd/link/internal/ld/data.go:786 +0x10f fp=0xc00072d098 sp=0xc00072cfc8 pc=0x559a0f
cmd/link/internal/ld.writeDatblkToOutBuf(0xc00004c000, 0xc000076040, 0x990000, 0x483164)
    /usr/local/go/src/cmd/link/internal/ld/data.go:825 +0xaf fp=0xc00072d260 sp=0xc00072d098 pc=0x55a05f
cmd/link/internal/ld.Datblk(...)
    /usr/local/go/src/cmd/link/internal/ld/data.go:808
cmd/link/internal/amd64.asmb(0xc00004c000)
    /usr/local/go/src/cmd/link/internal/amd64/asm.go:688 +0x1fe fp=0xc00072d2d0 sp=0xc00072d260 pc=0x5d1dbe
cmd/link/internal/ld.Main(0x84bde0, 0x10, 0x20, 0x1, 0x7, 0x10, 0x69ac0d, 0x1b, 0x6976f4, 0x14, ...)
    /usr/local/go/src/cmd/link/internal/ld/main.go:262 +0xd5d fp=0xc00072d428 sp=0xc00072d2d0 pc=0x5ab60d
main.main()
    /usr/local/go/src/cmd/link/main.go:65 +0x1d6 fp=0xc00072df60 sp=0xc00072d428 pc=0x614676
runtime.main()
    /usr/local/go/src/runtime/proc.go:203 +0x21e fp=0xc00072dfe0 sp=0xc00072df60 pc=0x42f5ce
runtime.goexit()
    /usr/local/go/src/runtime/asm_amd64.s:1357 +0x1 fp=0xc00072dfe8 sp=0xc00072dfe0 pc=0x45a501
注:本地设备是MACOS,我们使用的CI由无人机供电,我们使用
golang:1.13
图像来运行所有测试,因此我的假设是
linux/amd64


通过
MACOS
和使用进行本地测试,并且测试不会导致在CI服务器上经常发生的SIGBUS错误。

关于运行测试所用的Go版本(以及是“库存”Go还是
gccgo
或其他内容)和
GOOS/GOARCH
组合,您没有传达任何详细信息(尽管如此,从
SIGBUS
,我猜它是一些xBSD或MacOS,形成
asm\u amd64.s
我肯定它是
amd64
)。一个有趣的想法是尝试缩小问题的范围。本地设备和运行CI的设备之间有什么区别?它们在CPU插槽/内核的数量上有什么区别?硬件为CI供电是否正常(没有出现故障的RAM)?后台负载有什么区别(例如,只有在负载较重的情况下才会发生崩溃)本地框和CI是否具有相同的<代码> GOS+GOARCH < /代码>?@ KOSTiK副本看起来很像;你可以考虑在那里插手。