以太坊geth同步自動關閉問題分析
問題場景
在啟動以太坊geth同步資料的過程中會出現這樣的問題,就是節點同步正常,日誌沒有報異常資訊或者報出一些底層的類異常資訊,隨後geth節點程序自動關閉。
報異常資訊類似於下面的異常:
geth sync goroutine 16678 [IO wait]:
……
goroutine 8 [chan receive, 4822 minutes]:
github.com/ethereum/go-ethereum/vendor/github.com/rjeczalik/notify.(*nonrecursiveTree).internal(0xc420064360, 0xc420064300)
/home/bertrand/go-ethereum/build/_workspace/src/github.com /ethereum/go-ethereum/vendor/github.com/rjeczalik/notify/tree_nonrecursive.go:81 +0x94
created by github.com/ethereum/go-ethereum/vendor/github.com/rjeczalik/notify.newNonrecursiveTree
/home/bertrand/go-ethereum/build/_workspace/src/github.com/ethereum/go-ethereum/vendor/github.com/rjeczalik/notify/tree_nonrecursive.go:30 +0x1ad
問題原因排查
遇到上面的問題,首先需要排查的geth節點部署的服務的配置情況,特別是記憶體情況。建議在節點同步資料時通過top命令觀察一下記憶體情況。
引起此異常的主要原因是記憶體吃緊,導致oom-killer被觸發。oom-killer會殺掉佔用記憶體較高的程序,以確保系統不至於崩潰。
解決方案,首先是升級伺服器內從;如果條件有限,可考慮建立或擴充swap分割槽。
關注
獲得更多資訊和技術,請關注微信公眾號:程式新視界。
目前本人承接以太坊技術相關專案(交易或錢包類),如有需要請聯絡QQ:541075754。