EOS Database usage is at unsafe levels 错误

yufei       5 年, 4 月 前       1238

启动才几天的 EOS 测试网络,在昨晚悄无声息的挂了,看了一下挂掉的原因,竟然是

Details: 3060101 database_guard_exception: Database usage is at unsafe levels

于是一阵谷歌,找到了一个解释 https://github.com/EOSIO/eos/issues/5107

原因竟然是因为我启用了 eosio::history_api_plugin 插件和设置了 --filter-on='*'

nodeos -e -p eosio --plugin eosio::producer_plugin --plugin eosio::history_plugin --plugin eosio::chain_api_plugin --plugin eosio::history_plugin --plugin eosio::history_api_plugin --plugin eosio::http_plugin -d ~/Downloads/eosio --config-dir ~/Downloads/eosio/config --http-server-address=0.0.0.0:8888 --access-control-allow-origin='*'  --contracts-console --http-validate-host=false --filter-on='*' --verbose-http-errors --replay

这个插件和选项的意思就是把所有的链和块还有事务的状态都保存起来。

然而,现在的 EOS 链的状态是非常大的,好几百 G 。而我又使用了默认的配置

cat config.ini | grep "chain-state-db-size-mb"
chain-state-db-size-mb = 1024

单位是 m 。 也就是 1G ,于是就出错了。

这个错误,也是导致 eosio::history_api_plugin 被废弃的原因。

而官方的推荐是使用数据库来保存,比如 jgiszczak 的原话是这样的

With history_plugin enabled and a filter-on of "*", the chain state on a node synced with mainnet is absolutely massive. Impractically massive, which is why history_plugin is deprecated. If you wish to retain a completely unfiltered history, you should be using mongo_db_plugin or sql_db_plugin.

Without the history plugin, chain state on mainnet is currently ~1.8GiB. The default size is 1GiB, which is no longer large enough to accommodate even the minimal state size of mainnet.

Out of an abundance of caution, producer nodes are using chain-state-db-size-mb = 65536.

它推荐我们使用 mongo_db_pluginsql_db_plugin 来代替 history_plugin 插件来保存链的状态。

另外,主网的链状态数据大约在 ~1.8GiB 左右,而主网的默认大小为 1GiB,早已经是溢出太多了。

出于谨慎的考虑,生产者节点正在使用 chain-state-db-size-mb = 65536 ,也就是 64G

目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.