Ethereum 노드 트러블슈팅 가이드
Ethereum 노드 운영 중 발생하는 일반적인 문제와 해결 방법입니다.
목차
일반적인 오류
"Fatal: Failed to write genesis block"
증상: 노드가 시작되지 않고 위 오류 메시지가 표시됨
원인: 데이터 디렉토리에 쓰기 권한이 없거나 디스크 공간 부족
해결 방법:
# 데이터 디렉토리 권한 확인
ls -ld ~/.ethereum
# 권한 수정
chmod 755 ~/.ethereum
# 디스크 공간 확인
df -h ~/.ethereum
"Fatal: Failed to start the Ethereum service"
증상: 서비스 시작 실패
원인: 포트가 이미 사용 중이거나 설정 파일 오류
해결 방법:
# 포트 사용 확인
netstat -tlnp | grep 30303
netstat -tlnp | grep 8545
# 실행 중인 Geth 프로세스 확인
ps aux | grep geth
# 프로세스 종료
killall geth
# 설정 파일 확인
geth --config ~/.ethereum/geth.toml --help
동기화 문제
동기화가 매우 느림
증상: 블록 동기화 속도가 매우 느림
해결 방법:
캐시 크기 증가:
geth --mainnet --cache 8192 --syncmode snapSSD 사용: HDD 대신 SSD 사용 권장
더 많은 피어 연결:
geth --mainnet --maxpeers 100Snap sync 사용 (권장):
geth --mainnet --syncmode snap
동기화 실패
증상: 동기화가 중단되거나 실패함
해결 방법:
# 동기화 상태 확인
geth attach --exec 'eth.syncing'
# 최신 블록 번호 확인
geth attach --exec 'eth.blockNumber'
# 재동기화 (시간이 오래 걸릴 수 있음)
geth --mainnet --datadir ~/.ethereum --syncmode snap --reinit
포크 발생
증상: 로컬 체인이 메인 체인과 다른 포크에 있음
해결 방법:
# 체인 상태 확인
geth attach --exec 'eth.syncing'
# 자동으로 올바른 체인으로 전환 (일반적으로 자동 처리됨)
# 문제가 지속되면 재동기화
geth --mainnet --datadir ~/.ethereum --syncmode snap
성능 이슈
높은 CPU 사용률
증상: CPU 사용률이 지속적으로 높음
해결 방법:
- 캐시 크기 조정: 너무 높은 캐시는 CPU 부하를 증가시킬 수 있습니다
- 동기화 모드 확인: snap 모드가 full 모드보다 CPU 사용량이 적습니다
- 피어 수 제한: 너무 많은 피어는 CPU 부하를 증가시킵니다
높은 메모리 사용률
증상: 메모리 사용량이 매우 높음
해결 방법:
# 캐시 크기 감소
geth --mainnet --cache 2048
# 메모리 사용량 모니터링
geth attach --exec 'admin.nodeInfo'
높은 디스크 I/O
증상: 디스크 I/O가 매우 높음
해결 방법:
- SSD 사용: HDD 대신 SSD 사용
- 캐시 크기 증가: 더 많은 캐시는 디스크 I/O를 줄입니다
- 동기화 모드: snap 모드가 full 모드보다 디스크 I/O가 적습니다
네트워크 문제
피어 연결 실패
증상: 다른 노드와 연결할 수 없음
해결 방법:
# 피어 수 확인
geth attach --exec 'net.peerCount'
# 네트워크 정보 확인
geth attach --exec 'admin.peers'
# 포트 확인
netstat -tlnp | grep 30303
# 방화벽 확인
sudo ufw status
sudo ufw allow 30303/tcp
sudo ufw allow 30303/udp
인바운드 연결 없음
증상: 아웃바운드 연결만 있고 인바운드 연결이 없음
해결 방법:
- 포트 포워딩: 라우터에서 30303 포트 포워딩 설정
- 방화벽 설정: 30303 포트(TCP/UDP) 열기
- NAT 설정: NAT 뒤에 있는 경우 UPnP 활성화
데이터 손상
데이터베이스 오류
증상: 데이터베이스 관련 오류 메시지
해결 방법:
# 데이터베이스 재인덱싱
geth --mainnet --datadir ~/.ethereum --reinit
# 또는 데이터 디렉토리 삭제 후 재동기화 (주의: 모든 데이터 삭제)
# 백업 후 실행
rm -rf ~/.ethereum/geth
geth --mainnet --datadir ~/.ethereum --syncmode snap
RPC 문제
RPC 연결 실패
증상: RPC 요청이 실패함
해결 방법:
# RPC 설정 확인
geth attach --exec 'admin.nodeInfo'
# RPC 포트 확인
netstat -tlnp | grep 8545
# RPC 테스트
curl -X POST -H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \
http://localhost:8545
CORS 오류
증상: 웹 애플리케이션에서 CORS 오류 발생
해결 방법:
[HTTP]
CorsDomain = ["*"] # 개발용
# 또는 특정 도메인만 허용
# CorsDomain = ["https://example.com"]