Go-Ethereum

Geth 1.6.1 掛起拋出“意外故障地址”致命錯誤

  • November 27, 2017

自從升級到 1.6.1 版本後,Geth 節點不時(每週一次)掛起,並出現以下致命錯誤:

fatal error: fault
[signal SIGSEGV: segmentation violation code=0x1 addr=0x7f6453b72c88 pc=0x461097]

goroutine 1500070 [running]:
runtime.throw(0xe9b327, 0x5)
   /home/travis/.gimme/versions/go1.8.1.linux.amd64/src/runtime/panic.go:596 +0x95 fp=0xc43095a9f0 sp=0xc43095a9d0
runtime.sigpanic()
   /home/travis/.gimme/versions/go1.8.1.linux.amd64/src/runtime/signal_unix.go:297 +0x28c fp=0xc43095aa40 sp=0xc43095a9f0
runtime.memmove(0xc423ad8b80, 0x7f6453b72c88, 0x40)
   /home/travis/.gimme/versions/go1.8.1.linux.amd64/src/runtime/memmove_amd64.s:184 +0x657 fp=0xc43095aa48 sp=0xc43095aa40
github.com/ethereum/go-ethereum/consensus/ethash.hashimoto(0xc43095ad78, 0x20, 0x20, 0x3ff85f426cae9afa, 0x50ffff80, 0xc448b3abe0, 0xc43095ac48, 0x40b944, 0xd2b540, 0xc427ef5320, ...)
   /home/travis/gopath/src/github.com/ethereum/go-ethereum/consensus/ethash/algorithm.go:314 +0x36e fp=0xc43095abe0 sp=0xc43095aa48
github.com/ethereum/go-ethereum/consensus/ethash.hashimotoFull(0x7f6453000008, 0x143fffe0, 0x143fffe0, 0xc43095ad78, 0x20, 0x20, 0x3ff85f426cae9afa, 0xc448b3ab20, 0x20, 0x20, ...)
   /home/travis/gopath/src/github.com/ethereum/go-ethereum/consensus/ethash/algorithm.go:357 +0xbe fp=0xc43095ac58 sp=0xc43095abe0
github.com/ethereum/go-ethereum/consensus/ethash.(*Ethash).mine(0xc420fc0b40, 0xc43363c990, 0x0, 0x3ff85f426cac4155, 0xc427ef5320, 0xc427ef5380)
   /home/travis/gopath/src/github.com/ethereum/go-ethereum/consensus/ethash/sealer.go:130 +0x451 fp=0xc43095af68 sp=0xc43095ac58
github.com/ethereum/go-ethereum/consensus/ethash.(*Ethash).Seal.func1(0xc420695aa0, 0xc420fc0b40, 0xc43363c990, 0xc427ef5320, 0xc427ef5380, 0x0, 0x3ff85f426cac4155)
   /home/travis/gopath/src/github.com/ethereum/go-ethereum/consensus/ethash/sealer.go:72 +0x87 fp=0xc43095afa8 sp=0xc43095af68
runtime.goexit()
   /home/travis/.gimme/versions/go1.8.1.linux.amd64/src/runtime/asm_amd64.s:2197 +0x1 fp=0xc43095afb0 sp=0xc43095afa8
created by github.com/ethereum/go-ethereum/consensus/ethash.(*Ethash).Seal
   /home/travis/gopath/src/github.com/ethereum/go-ethereum/consensus/ethash/sealer.go:73 +0x1d7

知道這個錯誤的原因是什麼嗎?怎麼修?謝謝!

Geth v1.6.1現在已經過時了。更新到Geth v1.6.5(綽號帽子戲法),發布以防止最近對主網的 DOS 攻擊。如果問題仍然存在,請通過 go-ethereum GitHub 儲存庫報告:https ://github.com/ethereum/go-ethereum

根據乙太坊發布頁面,https://github.com/ethereum/go-ethereum/releases於 5 月 4日Geth v1.6.1發布。您最好的解決辦法是更新您的客戶端,並與最新版本保持同步。無論如何,完全有可能導致此錯誤的任何原因都已得到修復1.6.1

就錯誤本身而言,根據堆棧跟踪,這裡的一切都出錯了:/../src/github.com/ethereum/go-ethereum/consensus/ethash/algorithm.go:314

GitHub 中的修訂歷史顯示,該文件的最後一次修訂是在 5 月初,因此您的客戶端崩潰的第 314 行的條件在後續版本中沒有改變:

for j := uint32(0); j < mixBytes/hashBytes; j++ {
   copy(temp[j*hashWords:], lookup(2*parent+j))
}

我沒有查看已知問題,但根據最小的修訂歷史,我猜如果它是一個錯誤,它會在客戶端的其他地方。一般來說,我會更新您的客戶端,如果您仍然遇到問題,請嘗試重新生成您的 DAG 文件,可能它已以某種方式損壞。如果之後問題仍然存在,請在 repo 上發布問題。

引用自:https://ethereum.stackexchange.com/questions/17254