我正在尝试运行一些 web3.py 函数调用,以从运行在 AWS EC2 Linux 实例上托管的 Rinkeby 测试网的远程以太坊 geth 节点检索数据。
我从本地 Python3 解释器设置了我的提供程序,它成功连接,并且对于某些基本函数调用间歇性地工作:
import web3, json, requests
from web3 import Web3, HTTPProvider
provider = HTTPProvider( 'http://remote-node-ip-address:8545' )
w3 = Web3(provider)
但是,当我运行某些函数调用(例如w3.eth.accounts
从 Python3 解释器)时,远程服务器似乎显着减慢(挂起)并且基本上经常出现此错误超时:
requests.exceptions.ReadTimeout: HTTPConnectionPool(host='remote-node-ip', port=8545): Read timed out.
(读取超时=10)
但有时它工作得很好,所以整体网络连接到位。当我通过 SSH 连接到实际上是一个 Docker 容器的远程 AWS 服务器时,它似乎确实很慢而且很慢。我从下面的 TOP 输出中唯一注意到的是 WA 的 %CPU 非常高,为 99.5%:
> top - 23:44:51 up 6:42, 0 users, load average: 1.76, 1.73, 1.75
> Tasks: 4 total, 1 running, 3 sleeping, 0 stopped, 0 zombie
> %Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 0.0 id, **99.5 wa**, 0.0 hi, 0.0
> si, 0.0 st KiB Mem : 2049248 total, 1102520 free, 596396 used,
> 350332 buff/cache KiB Swap: 0 total, 0 free, 0
> used. 1289532 avail Mem
>
> PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+
> COMMAND 406 root 20 0 1526260 491008 424 S 0.5 24.0
> 0:05.30 geth
> 1 root 20 0 56416 11620 0 S 0.3 0.6 1:18.18 supervisord 422 root 20 0 36636 1116 684 R 0.3 0.1
> 0:00.01 top 412 root 20 0 18232 460 8 S
> 0.0 0.0 0:00.02 bash
我尝试将我的 AWS 实例扩展到 4-vCPU、cpu 优化的 c5.xlarge 实例,但我遇到了同样的问题。我还针对在我的本地主机上运行 Rinkeby 的本地 geth 节点测试了相同的命令,并且没有问题。
是否有人对解决我的远程 geth 节点这些问题的最佳方法有任何意见?