永遠同步
我正在嘗試使用命令
geth --rpc
並ethminer
在 ubuntu 16.04 機器上進行探勘。有時它可以工作,但通常在我重新啟動 PC 後,我收到錯誤“網路同步,之後將啟動礦工”。即使在讓它執行了幾天之後,即使它之前在同一天工作過,也會發生這種情況。這意味著同步不起作用,因為在此期間它必須下載的額外數據非常小,通常不會花費數小時。最多需要幾分鐘。作為解決方法,然後我刪除所有鏈數據並從頭開始同步。這需要一整天的時間,但它會再次起作用。然後在嘗試了幾次並重新啟動後,問題又回來了,我需要重新下載或重新創建所有 30GB。這是一個非常討厭的問題。
我能做些什麼呢?
這是 geth 輸出的最後 10 行:
... INFO [11-17|16:10:23] Imported new chain segment blocks=2 txs=118 mgas=8.346 elapsed=11.620s mgasps=0.718 number=4018787 hash=b33409…30e233 INFO [11-17|16:10:37] Imported new chain segment blocks=3 txs=137 mgas=13.701 elapsed=13.448s mgasps=1.019 number=4018790 hash=e652f8…f20c4e INFO [11-17|16:10:45] Imported new chain segment blocks=2 txs=174 mgas=10.659 elapsed=8.115s mgasps=1.313 number=4018792 hash=5cedef…eaf7ed INFO [11-17|16:10:53] Network syncing, will start miner afterwards INFO [11-17|16:10:55] Imported new chain segment blocks=2 txs=135 mgas=8.080 elapsed=10.302s mgasps=0.784 number=4018794 hash=cc3e31…f5fff2 INFO [11-17|16:10:55] Network syncing, will start miner afterwards INFO [11-17|16:10:57] Network syncing, will start miner afterwards INFO [11-17|16:11:04] Imported new chain segment blocks=1 txs=105 mgas=6.709 elapsed=8.731s mgasps=0.768 number=4018795 hash=9053b0…379cf6 INFO [11-17|16:11:12] Imported new chain segment blocks=1 txs=171 mgas=6.669 elapsed=8.369s mgasps=0.797 number=4018796 hash=4af69b…9418a5 INFO [11-17|16:11:23] Imported new chain segment blocks=2 txs=155 mgas=10.575 elapsed=10.816s mgasps=0.978 number=4018798 hash=41a86c…fc801d
相應的 ethminer 輸出:
$ ethminer miner 16:10:53.876|ethminer Getting work package... JSON-RPC problem. Probably couldn't connect. Retrying in 1... miner 16:10:55.878|ethminer Getting work package... JSON-RPC problem. Probably couldn't connect. Retrying in 1... miner 16:10:57.879|ethminer Getting work package... ^CON-RPC problem. Probably couldn't connect. Retrying in 2...
更新:
該系統有 16GB 的 RAM,一個快速的 SSD,它的連接速度是 100MBit/s。連接速度測試有很好的結果。
更新:
我今天同步並探勘了它。現在我讀到目前塊號應該是 4570731,但我的下載是 4018737,所以有超過 50 萬個塊失去。我認為我的數據庫已損壞。這可能是原因嗎?如果是,為什麼它會一次又一次地損壞?
更新:
我從昨天開始用
--cache 8192
. 它現在位於塊 4136031,這意味著它在 24 小時內前進了大約 120000 個塊。這意味著完成同步還需要 5 天以上的時間。
礦工只有在你有一個同步到最後一個區塊的節點時才能工作,因此你的節點需要在礦工啟動之前完成同步。
如果一個節點以空數據庫開始,通常會進行快速同步。快速同步不會載入完整的鏈,這使得它比完全同步更快。
如果您的節點有一段時間沒有執行,它將失去與區塊鏈的同步,並且在您再次打開它時必須同步。但是,一旦數據庫不為空,就不再可能進行快速同步。然後節點進行完全同步。完全同步比快速同步需要更多的資源,尤其是 RAM 似乎與我們的完全同步有關。
因此,根據我的經驗,我建議如下:
- 確保執行節點的機器上有足夠的 RAM,最少 8GB,更好。
- 使用選項給 geth 更大的記憶體
--cache cache_size_in_MB
- 選擇盡可能大的記憶體大小,但要根據您的 RAM 大小。我的經驗是,您應該將記憶體大小設置為總 RAM 的 30% 到 40% 左右,否則如果您長時間執行節點,geth 可能會在稍後遇到記憶體不足的問題。所以對於 8GB RAM 試試
--cache 3072
請注意,如果您為 geth 分配了足夠的記憶體,您將看到 geth 每個“導入的新鏈段”消息導入幾個 10 個塊。
我的另一個經驗是,如果你沒有為 geth 提供足夠的記憶體大小,geth 就無法更新區塊鏈的本地副本。所以我建議在同步後保留記憶體設置。
首先,同步存在許多非常不同的問題,您遇到的問題很可能是多個問題的重疊症狀,因此幾乎不可能在這裡診斷。最好的選擇是嘗試同步,如果在一天內沒有完成,請刪除鏈數據並從頭開始快速同步(原因見下文)。
同步有兩種,普通同步和快速同步。快速同步只能從頭開始,例如在您刪除鏈數據目錄之後。可以從中間狀態完成正常同步。
迄今為止,在良好的硬體和良好的連接上,快速同步需要幾個小時。但是,即使與此相比,正常的同步也非常慢。如果您有幾個小時沒有同步,那麼使用正常同步是有意義的,因為它可以從以前的狀態繼續,而且幾乎沒有什麼可以趕上的。但是,如果您幾個月沒有同步,那麼進行正常同步是不切實際的。同步可能需要兩週以上的時間,因此在這種情況下,您最好刪除chaindata 目錄並開始快速同步,這在好的設備上需要幾個小時,或者在平均設備和連接上可能需要一天。
請注意,當此答案過時(例如,您在 2018 年或之後閱讀此內容)時,估計時間可能不再反映目前情況,但概念仍然相同:如果您在幾週前同步過,請刪除chaindata 目錄並開始快速同步。