안녕하세요. KLAY EN 노드를 운영중에 몇가지 어려움이 있어 문의드립니다.
첫번째로, Connection Refused.
노드에 몇 가지 rpc call 을 주기적으로 요청하고 있는데, 약 하루 정도 지나면 노드로부터 Connection Refused 라는 응답을 받고 있습니다.
노드를 재시작 하면 해결이 됩니다.
두번째로, 메모리 사용량
위 이슈와 연관이 있을 것으로 추측하는데요, 위와 같이 약 하루가 지나면 메모리 사용량이 60GB (전체의 95%) 에 육박하게 됩니다. 이 역시 노드를 재시작하면 메모리가 해제가 됩니다.
메모리 관련해서 이상한 점은 노드를 시작하고 rpc call 을 요청하지 않을때는 약 22GB 정도의 메모리 사용량이 유지되는데, 주기적으로 rpc call 을 수행하면
메모리가 튀는 것이 아니라 시간이 지남에 따라 누적이 되어 사용량이 Linear 하게 증가됩니다. 그리고 rpc call 을 멈추면 메모리 사용량이 멈춘 시점의 사용량을 거의 유지하고 있어 메모리 해제가 되지 않는 것으로 보입니다.
첫 번째 이슈(Connection Refused)는 메모리 사용량이 전체의 90% 이상을 사용하기 전에는 발생하지 않아서 메모리 사용량과 관련이 있을 것이라고 추측하고 있습니다.
이슈 분석을 위해 노드를 운영하는 장비 스펙, 노드 configuration, 사용하고 있는 rpc call 을 전달 드립니다.
EN 장비 주요 스펙
- CPU (20 core)
- Memory 64GB
- SSD 8TB
Node Configuration
# Configuration file for the kend
# cypress, baobab is only available if you don't specify NETWORK_ID.
NETWORK="cypress"
# if you specify NETWORK_ID, a private network is created.
NETWORK_ID=
PORT=32323
SERVER_TYPE="http"
SYNCMODE="full"
VERBOSITY=3
MAXCONNECTIONS=10
# txpool options setting
TXPOOL_EXEC_SLOTS_ALL=4096
TXPOOL_NONEXEC_SLOTS_ALL=4096
TXPOOL_EXEC_SLOTS_ACCOUNT=4096
TXPOOL_NONEXEC_SLOTS_ACCOUNT=4096
TXPOOL_LIFE_TIME="30m"
# rpc options setting
RPC_ENABLE=1 # if this is set, the following options will be used
RPC_API="klay,eth,net,web3,debug" # available apis: admin,debug,klay,eth,miner,net,personal,rpc,txpool,web3
RPC_PORT=8551
RPC_ADDR="0.0.0.0"
RPC_CORSDOMAIN="*"
RPC_VHOSTS="*"
# below options are related with http server
RPC_CONCURRENCYLIMIT=3000
RPC_READ_TIMEOUT=30
RPC_WRITE_TIMEOUT=30
RPC_IDLE_TIMEOUT=120
RPC_EXECUTION_TIMEOUT=30
# ws options setting
WS_ENABLE=1 # if this is set, the following options will be used
WS_API="klay,eth,net,web3" # available apis: admin,debug,klay,eth,miner,net,personal,rpc,txpool,web3
WS_ADDR="0.0.0.0"
WS_PORT=8552
WS_ORIGINS="*"
# service chain options setting
SC_MAIN_BRIDGE=0 # if this is set, the following options will be used.
SC_MAIN_BRIDGE_PORT=50505
SC_MAIN_BRIDGE_INDEXING=0 # this option will be deprecated.
# Setting 1 is to enable options, otherwise disabled.
AUTO_RESTART=0
METRICS=1
PROMETHEUS=1
DB_NO_PARALLEL_WRITE=0
MULTICHANNEL=1
SUBPORT=$((PORT + 1)) # used for multi channel option
# discover options
NO_DISCOVER=0 # setting 1 to disable discovery
BOOTNODES=""
# log rotation related options
LOG_ROTATE=0 # setting 1 to enable the log rotation related options
LOG_MAXSIZE=100 # the unit is MB
LOG_MAXBACKUPS=10
LOG_MAXAGE=30 # maximum number of days to retain a log file
LOG_COMPRESS=1 # setting 1 to compress the backup logs in gz format
# Raw options e.g) "--txpool.nolocals"
ADDITIONAL=""
# auto restart options
AUTO_RESTART_NODE=0
AUTO_RESTART_INTERVAL=0.1
# manually configured
DATA_DIR=/var/kend/data
LOG_DIR=/var/kend/logs
사용하는 주요 rpc call
- debug_traceBlockByNumberRange
- klay_getTransactionByHash
- klay_getTransactionReceipt
- klay_getLogs
위 rpc call 들을 주기적으로 사용했을때 메모리 사용량이 누적되어 증가하고 줄어들지 않는 점에 대하여 문의 드리고 싶고 위 문제를 해결하기 위해 가이드 주실 부분이나 의견 주시면 감사하겠습니다.