ReadTimeoutException은 일정 시간 동안 상대편으로부터 패킷을 받지 못해 연결이 끊길 때 발생하는 오류이다. 전체 메시지는 Internal Exception: io.netty.handler.timeout.ReadTimeoutException 형태로 나타난다.

마인크래프트 서버는 네트워크 계층으로 Netty를 사용하며, 일정 시간 동안 패킷이 오가지 않으면 연결이 끊어진 것으로 판단한다. 클라이언트 화면에는 접속이 끊겼다는 안내가, 서버 콘솔에는 이 예외가 기록된다.

원인

원인 판단 기준
이용자의 네트워크 불안정 특정 이용자에게만 발생한다
서버 틱 정지 여러 이용자가 동시에 끊긴다. Can't keep up이나 Watchdog thread가 함께 나타난다
서버 호스트의 네트워크 문제 전원이 동시에 끊기고 서버 프로세스는 정상이다
프록시 설정 오류 Velocity·BungeeCord 구성에서 접속 직후 반복해서 끊긴다
대용량 패킷 처리 지연 지도, 책, 대형 인벤토리 등 큰 데이터를 주고받는 시점

조사

  1. 여러 명이 동시에 끊겼는지, 한 명만 끊겼는지 확인한다. 이것으로 원인 범위가 절반으로 줄어든다.
  2. 같은 시각의 콘솔에 Can't keep up이나 Watchdog thread가 있는지 본다. 있다면 네트워크가 아니라 성능 문제다.
  3. 프록시를 사용한다면 프록시와 하위 서버 양쪽 로그를 함께 확인한다.

대응

서버 성능이 원인인 경우가 가장 많으므로, 네트워크 설정을 바꾸기 전에 성능 상태를 먼저 확인하는 것이 좋다. 틱이 정지하면 서버가 패킷을 보내지 못하고, 그 결과 클라이언트 쪽에서 시간 초과가 발생한다.

개별 이용자의 문제라면 유선 연결, 공유기 재시작, 다른 네트워크에서의 재시도 순으로 확인하도록 안내한다.

같이 보기