Seit dem Upgrade auf Version 1.6.1 hängt der Geth-Knoten von Zeit zu Zeit (einmal pro Woche) mit folgendem schwerwiegenden Fehler:
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
Irgendeine Idee, was der Grund für diesen Fehler ist? wie repariert man? Danke!
Geth v1.6.1
ist mittlerweile veraltet. Update auf Geth v1.6.5
(Spitzname Hat Trick), veröffentlicht, um einen kürzlichen DOS-Angriff auf das Mainnet zu verhindern. Wenn das Problem weiterhin besteht, melden Sie es über das GitHub-Repo von go-ethereum: https://github.com/ethereum/go-ethereum
Laut der Veröffentlichungsseite von Ethereum wurde https://github.com/ethereum/go-ethereum/releasesGeth v1.6.1
am 4. Mai veröffentlicht . Ihre beste Lösung wäre, Ihren Client zu aktualisieren und mit den neuesten Versionen auf dem Laufenden zu bleiben. Es ist durchaus möglich, dass die Ursache für diesen Fehler 1.6.1
sowieso behoben wurde.
Was den Fehler selbst betrifft, so läuft hier laut Stacktrace alles schief:/../src/github.com/ethereum/go-ethereum/consensus/ethash/algorithm.go:314
Der Überarbeitungsverlauf in GitHub zeigt, dass die letzte Überarbeitung der Datei wieder Anfang Mai war, sodass die Bedingung in Zeile 314, bei der Ihr Client explodiert, bei nachfolgenden Versionen nicht geändert wurde:
for j := uint32(0); j < mixBytes/hashBytes; j++ {
copy(temp[j*hashWords:], lookup(2*parent+j))
}
Ich habe die bekannten Probleme nicht durchgesehen, aber basierend auf dem minimalen Revisionsverlauf vermute ich, dass, wenn es sich um einen Fehler handelt, er sich an einer anderen Stelle im Client befindet. Im Allgemeinen würde ich Ihren Client aktualisieren, und wenn Sie immer noch Probleme haben, versuchen Sie, Ihre DAG-Datei neu zu generieren, vielleicht ist sie irgendwie beschädigt. Wenn das Problem danach weiterhin besteht, posten Sie ein Problem im Repo.
Dieser Fehler betrifft weiterhin Clients ab Version 1.7.2 und wird hier gemeldet: https://github.com/ethereum/go-ethereum/issues/14552
Ismael
Juan Ignacio Pérez Sakristán
Ismael
Juan Ignacio Pérez Sakristán