Geth 1.6.1 зависает, выдавая фатальную ошибку «неожиданный адрес ошибки»

После обновления до версии 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

Любая идея, в чем причина этой ошибки? как исправить? Спасибо!

На прошлой неделе было несколько атак на сеть Ethereum, вам следует обновиться до версии 1.6.5. Если ошибка появится снова, сообщите об этом в репозиторий go-ethereum на github.
Обновился до 1.6.5, проблема та же.
Я видел бэктрейсы в своих нодах, но они появляются время от времени и кажутся недействительными блоками/транзакциями, но geth не падает и продолжает работать без проблем. Если вы можете устранить аппаратную проблему, вы можете сообщить о ней разработчикам github.com/ethereum/go-ethereum/issues .
Спасибо. Я отправил его на github.com/ethereum/go-ethereum/issues/14629.

Ответы (2)

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, возможно, он каким-то образом поврежден. Если после этого проблема не исчезнет, ​​опубликуйте сообщение о проблеме в репозитории.

Обновлен до geth 1.6.5 и все та же проблема... неожиданный адрес ошибки 0x7fcb56135308... фатальная ошибка: ошибка... [сигнал SIGSEGV: код нарушения сегментации = 0x1 адрес = 0x7fcb56135308 pc = 0x461137] ...

Эта ошибка по-прежнему затрагивает клиентов, начиная с версии 1.7.2, и о ней сообщается здесь: https://github.com/ethereum/go-ethereum/issues/14552 .

Да, это правда. Мои узлы под управлением 1.7.2 зависают раз в день или около того при майнинге.
Кажется, я видел комментарий, в котором говорилось, что это было недавно исправлено (примерно в январе 2018 года).
@Линас, не могли бы вы поподробнее рассказать об исправлении? Я только что клонировал и собрал geth, и сегодня я столкнулся с дампом ядра, хотя я не могу гарантировать, что он идентичен тому, что сообщается здесь.
Бьет меня. Я заметил, что вы прокомментировали github. Я не могу сказать, совпадает ли ваша новая трассировка стека со старой. Если у вас другая трассировка стека, вам следует открыть другую проблему. Это становится очень запутанным, очень быстро, если одна и та же проблема github используется для сообщения о разных проблемах. Первоначальный сбой всегда был в memmove, в hashimoto. Ваша авария, кажется, в другом месте.