# witness_node启动常见问题

# 1. 如何正常启动witness_node程序

建议按如下命令行启动程序(根据自己的情况,适当修改参数值和端口号):

export LC_ALL=C

nohup ./programs/witness_node/witness_node --data-dir=trusted_node  --rpc-endpoint="0.0.0.0:28090" --p2p-endpoint="0.0.0.0:6789" --track-account "\"1.2.241993\"" --max-ops-per-account=-1  --fast-replay 1>nohup.out 2>&1 &

按上面方式启动,控制台输出会重定向到nohup.out,如果启动有异常,可能查看nohup.out定位问题。

# 2. 如何判断witness_node在正常运行

观察后台日志文件trusted_node/logs/witness.log, 如果日志持续在网络上接收区块,表示节点在正常运行, 如下

2018-08-23T07:10:39 th_a:invoke handle_block         handle_block ] Got block: #6939202 time: 2018-08-23T07:10:39 latency: 29 ms from: init6  irreversible: 6939194 (-8)		application.cpp:487
2018-08-23T07:10:42 th_a:invoke handle_block         handle_block ] Got block: #6939203 time: 2018-08-23T07:10:42 latency: 30 ms from: init4  irreversible: 6939195 (-8)		application.cpp:487
2018-08-23T07:10:45 th_a:invoke handle_block         handle_block ] Got block: #6939204 time: 2018-08-23T07:10:45 latency: 32 ms from: init0  irreversible: 6939195 (-9)		application.cpp:487
2018-08-23T07:10:48 th_a:invoke handle_block         handle_block ] Got block: #6939205 time: 2018-08-23T07:10:48 latency: 34 ms from: init5  irreversible: 6939197 (-8)		application.cpp:487
2018-08-23T07:10:51 th_a:invoke handle_block         handle_block ] Got block: #6939206 time: 2018-08-23T07:10:51 latency: 34 ms from: init1  irreversible: 6939198 (-8)		application.cpp:487
2018-08-23T07:10:54 th_a:invoke handle_block         handle_block ] Got block: #6939207 time: 2018-08-23T07:10:54 latency: 36 ms from: bob  irreversible: 6939199 (-8)			application.cpp:487
2018-08-23T07:10:57 th_a:invoke handle_block         handle_block ] Got block: #6939208 time: 2018-08-23T07:10:57 latency: 37 ms from: init1  irreversible: 6939200 (-8)		application.cpp:487
2018-08-23T07:11:00 th_a:invoke handle_block         handle_block ] Got block: #6939209 time: 2018-08-23T07:11:00 latency: 39 ms from: init7  irreversible: 6939200 (-9)		application.cpp:487
2018-08-23T07:11:03 th_a:invoke handle_block         handle_block ] Got block: #6939210 time: 2018-08-23T07:11:03 latency: 41 ms from: bao  irreversible: 6939201 (-9)			application.cpp:487
2018-08-23T07:11:06 th_a:invoke handle_block         handle_block ] Got block: #6939211 time: 2018-08-23T07:11:06 latency: 41 ms from: init8  irreversible: 6939202 (-9)		application.cpp:487
2018-08-23T07:11:09 th_a:invoke handle_block         handle_block ] Got block: #6939212 time: 2018-08-23T07:11:09 latency: 44 ms from: init2  irreversible: 6939203 (-9)		application.cpp:487
2018-08-23T07:11:12 th_a:invoke handle_block         handle_block ] Got block: #6939213 time: 2018-08-23T07:11:12 latency: 45 ms from: init4  irreversible: 6939204 (-9)

# 3. 块同步时报错

观察后台日志文件trusted_node/logs/witness.log, 如果日志持续报错,如"unlinkable block", "block does not link to known chain",这是区块同步出错了。

解决方法:

  • 先关闭程序,带上--replay-blockchain 重新启动,等待启动完成后,观察witness.log日志是否正常。
  • 如果仍然失败,可能是区块同步异常,有可能本地的区块链文件坏掉了。需要停止witness_node程序,然后删除trusted_node, 重新启动witness_node。
  • 或者不需要删除trusted_node目录,启动命令加上参数--resync-blockchain, 会重新同步区块。

# 4. 如何正常关闭witness_node

witness_node将所有数据以对象的形式保存在内存,程序正常退出时,会将内存中的数据写入到磁盘,所以不能强行kill掉进程,否则内存数据库会坏掉。

  • 如果witness_node没有后台运行,则执行一次Ctrl + C, 然后等待程序保存内存数据后自动退出。
  • 如果witness_node运行在后台, 执行kill -s SIGINT $(pgrep witness_node),等待程序保存内存数据后自动退出。不能使用kill -9, 否则下次启动会重建索引,启动比较慢。

# 5. witness_node进程正常,但不从网络接收区块

  • 检查后台日志文件, 发现无报错信息, 并且节点没有从网络中接收新区块。此时可能是你的witness_node版本比较低,请及时访问github release 页面 (opens new window) 下载最新的程序包。
  • 可以通过-v参数,查看witness_node版本号 :
$./programs/witness_node/witness_node -v
Version: 1.0.180713-379-g4c9a2f4
SHA: 4c9a2f4e168503abe3ce1432c699f88b8babe356
Timestamp: 4 hours ago
SSL: OpenSSL 1.0.2o  27 Mar 2018
Boost: 1.67
Websocket++: 0.7.0

# 6.BP使用什么操作系统,对硬件包括带宽有什么要求

  • ubuntu 14.04 64位系统
  • 4核32G内存200G硬盘,50MB+带宽,按流量计费,双机灾备
  • 可以使用云服务器

# 7. witness_node启动时,报端口错误

检查服务器上是不是启动了多个witness_node, 导致端口冲突。

ps xf | grep witness_node

如果是启动了多个witness_node,需要全部关闭,再重新启动:

for i in $(pgrep witness_node); do echo kill -9 $i; done

# 8. witness_node启动失败,无日志,进程不存在

修改本地的config.ini文件,如下:

[logger.default]
level=debug
appenders=stderr,FILE

然后重新启动,错误信息会打印到控制台