После обновления до версии 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
(по прозвищу Hat Trick), выпущенное для предотвращения недавней DOS-атаки на основную сеть. Если проблема не устранена, сообщите о ней через репозиторий go-ethereum GitHub: https://github.com/ethereum/go-ethereum .
Согласно странице релизов Ethereum, https://github.com/ethereum/go-ethereum/releases , Geth v1.6.1
он был выпущен 4 мая. Лучше всего для исправления было бы обновить клиент и оставаться в курсе последних выпусков. Вполне возможно, что то, что вызвало эту ошибку, было исправлено в 1.6.1
любом случае.
Что касается самого бага, то, судя по трассировке стека, здесь все идет не так:/../src/github.com/ethereum/go-ethereum/consensus/ethash/algorithm.go:314
История изменений в GitHub показывает, что последняя версия файла снова была в начале мая, поэтому условие в строке 314, на котором ваш клиент взрывается, не изменилось в последующих выпусках:
for j := uint32(0); j < mixBytes/hashBytes; j++ {
copy(temp[j*hashWords:], lookup(2*parent+j))
}
Я не просматривал известные проблемы, но, основываясь на минимальной истории изменений, я предполагаю, что если это ошибка, то она должна быть где-то еще в клиенте. В общем, я бы обновил ваш клиент, и если у вас все еще есть проблемы, попробуйте восстановить файл DAG, возможно, он каким-то образом поврежден. Если после этого проблема не исчезнет, опубликуйте сообщение о проблеме в репозитории.
Эта ошибка по-прежнему затрагивает клиентов, начиная с версии 1.7.2, и о ней сообщается здесь: https://github.com/ethereum/go-ethereum/issues/14552 .
Исмаэль
Хуан Игнасио Перес Сакристан
Исмаэль
Хуан Игнасио Перес Сакристан