Geth 1.6.1 se bloquea arrojando un error fatal de "dirección de falla inesperada"

Desde que se actualizó a la versión 1.6.1, el nodo Geth se cuelga de vez en cuando (una vez a la semana) con el siguiente error fatal:

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

¿Alguna idea de cuál es la razón de este error? ¿como arreglar? ¡Gracias!

Hubo algunos ataques a la red Ethereum la semana pasada, debe actualizar a v1.6.5. Si el error vuelve a aparecer, informe al repositorio go-ethereum en github.
Actualizado a 1.6.5 pero sigue con el mismo problema
He visto backtraces en mis nodos, pero aparecen de vez en cuando y parecen ser un bloque/tx no válido, pero geth no se bloqueó y siguió funcionando sin problemas. Si puede descartar un problema de hardware, puede informarlo a los desarrolladores github.com/ethereum/go-ethereum/issues .

Respuestas (2)

Geth v1.6.1ahora está desactualizado. Actualización a Geth v1.6.5(apodada Hat Trick), lanzada para evitar un ataque reciente de DOS en la red principal. Si el problema persiste, repórtelo a través del repositorio go-ethereum GitHub: https://github.com/ethereum/go-ethereum

Según la página de lanzamientos de Ethereum, https://github.com/ethereum/go-ethereum/releases , Geth v1.6.1se lanzó el 4 de mayo. Su mejor apuesta para solucionarlo sería actualizar su cliente y mantenerse al día con las últimas versiones. Es muy posible que lo que haya causado este error se haya solucionado de 1.6.1todos modos.

En cuanto al error en sí, según stacktrace, todo sale mal aquí:/../src/github.com/ethereum/go-ethereum/consensus/ethash/algorithm.go:314

El historial de revisión en GitHub muestra que la última revisión del archivo fue nuevamente a principios de mayo, por lo que la condición en la línea 314 en la que explota su cliente no ha cambiado con versiones posteriores:

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

No he revisado los problemas conocidos, pero según el historial de revisión mínimo, supongo que si se trata de un error, estaría en otra parte del cliente. En general, actualizaría su cliente y, si aún tiene problemas, intente regenerar su archivo DAG, tal vez esté dañado de alguna manera. Si el problema persiste después de eso, publique un problema en el repositorio.

Actualizado a geth 1.6.5 y sigue siendo el mismo problema... dirección de falla inesperada 0x7fcb56135308... error fatal: falla... [señal SIGSEGV: código de violación de segmentación=0x1 addr=0x7fcb56135308 pc=0x461137]...

Este error continúa afectando a los clientes desde 1.7.2 y se informa aquí: https://github.com/ethereum/go-ethereum/issues/14552

Sí, es verdad. Mis nodos que ejecutan 1.7.2 se bloquean una vez al día más o menos durante la minería
Creo que vi flotar un comentario que decía que esto se solucionó recientemente (alrededor de enero de 2018)
@Linas, ¿puede ser más específico sobre la corrección? Acabo de clonar y compilar geth y me encuentro con el volcado del núcleo hoy, aunque no puedo garantizar que sea idéntico al informado aquí.
me gana Veo que comentaste en github. No puedo decir si su nuevo seguimiento de pila es el mismo que el anterior. Si tiene un seguimiento de pila diferente, debe abrir un problema diferente. Se vuelve muy confuso, muy rápido, si se usa el mismo problema de github para informar diferentes problemas. El choque original siempre estuvo en memmove, en hashimoto. Su accidente parece estar en un lugar diferente.