匪夷所思的golang程序panic
我的程序布在线上几十万机器上,考虑到环境的差异,每个goroutine启动前都会加段保护,通过recover
捕捉可能的panic然后告警出来。
之前就在线上就抓到一个非常匪夷所思的panic在启动进程的地方,报给golang官方也没个所以然,怀疑是内存损坏。
今天又遇到了一例同样匪夷所思的,趁机记录下来,同样怀疑是内存损坏,因为类似的代码按golang语法定义是不可能造成panic的
告警的栈是:
对应的golang代码是:
Update on 2017-06-15 继续记录奇奇怪怪的panic
panic的栈如下图
对应go代码如下图,除了内存坏了,我是找不到其它导致panic runtime error: integer divide by zero
的原因
Update on 2017-06-27
panic的栈如下图,挂在strconv.ParseInt里
对应代码位置,看起来是str部分被破坏了,当然没用unsafe的东西乱改啦
Update on 2017-10-12
make(map[string][]string)
时报integer divide by zero: goroutine 13 [running]
Update on 2017-12-06
看到这篇文章,是内存在高温下有一个bit反转了导致的问题,怀疑上面也是类似的问题,可惜出问题的机器都不是我的也没有条件接触硬件跑memtest。所以这篇文章可以大概定性,后续不再更新。
Update on 2019-11-06
这里有一个曲折排查最后确认是内存问题的记录 https://marcan.st/2017/12/debugging-an-evil-go-runtime-bug/