Golang-進程無端消失?

致使進程消失緣由:64位操做系統中,寫一個溢出指針到內存的非指針字符(a non-pointer word of memory),致使GC的時,不能看到該溢出塊,因此致使GC過早回收該塊,而後就致使崩潰(目前在NaCl/amd64p32已發現該問題)。golang

Let‘s Go!


1.解決方案

本文提供3鍾方案可選:google

  • 升級Golang編譯版本 1.5->1.8 (必須)
  • 增長進程監控
  • 增長supervior管理進程

2.環境

  • Golang version:1.5
  • Linux version:Linux version 2.6.32-279.el6.x86_64 (gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) )
  • Os version:CentOS release 6.3 (Final) 2.6.32-279.el6.x86_64
  • Cpu :12
  • Mem :8G

3.問題現象

錯誤信息

fatal error: bad map state

goroutine 89 [running]:
runtime.throw(0x990ca0, 0xd)
        /usr/local/go/src/runtime/panic.go:527 +0x90 fp=0xc8323e9bb0 sp=0xc8323e9b98
runtime.evacuate(0x803440, 0xc8200f4c30, 0x6b)
        /usr/local/go/src/runtime/hashmap.go:825 +0x3b1 fp=0xc8323e9c70 sp=0xc8323e9bb0
runtime.growWork(0x803440, 0xc8200f4c30, 0xa5)
        /usr/local/go/src/runtime/hashmap.go:795 +0x83 fp=0xc8323e9c90 sp=0xc8323e9c70
runtime.mapassign1(0x803440, 0xc8200f4c30, 0xc8323e9d60, 0xc8323e9d70)
        /usr/local/go/src/runtime/hashmap.go:433 +0x176 fp=0xc8323e9d38 sp=0xc8323e9c90
............

4.問題緣由

  • 64位操做系統中,寫一個溢出指針到內存的非指針字符(a non-pointer word of memory),致使GC的時,不能看到該溢出塊,因此致使GC過早回收該塊,而後就致使崩潰(目前在NaCl/amd64p32已發現該問題)。

使用go版本1.5與目前線上版本一致,推斷因該問題引發。操作系統

相關文章
相關標籤/搜索