Can't keep up
Can't keep up! Is the server overloaded? Running Xms behind, skipping Y tick(s)는 마인크래프트 서버 콘솔에 나타나는 경고로, 한 틱을 처리하는 데 걸린 시간이 기준을 넘겨 서버가 밀린 틱을 건너뛰었음을 알린다.
마인크래프트 서버는 1초에 20번, 즉 50밀리초마다 한 번씩 틱을 처리한다. 한 틱이 50밀리초를 넘기면 다음 틱이 밀리고, 밀린 시간이 일정 기준을 넘으면 서버는 따라잡기 위해 틱을 건너뛰면서 이 경고를 출력한다. 따라서 이 메시지는 원인이 아니라 결과를 알리는 신호이며, 무엇이 틱을 늦추었는지는 별도로 확인해야 한다.
정상적인 경우
다음 상황에서 한두 번 나타나는 것은 문제가 아니다.
- 서버를 처음 시작하며 월드를 불러올 때
- 대규모 WorldEdit 편집이나 월드 저장 직후
- 백업이나 지도 렌더링 작업이 끝나는 시점
반복적으로, 특히 이용자가 접속한 상태에서 계속 출력된다면 조사가 필요하다.
주요 원인
| 원인 | 확인 방법 |
|---|---|
| CPU 단일 코어 성능 부족 | 서버 틱 처리는 대부분 한 스레드에서 이루어진다. 코어 수보다 단일 코어 성능이 중요하다 |
| 가비지 컬렉션 정지 | /spark health로 GC 정지 시간을 확인한다. 가비지 컬렉터 참고
|
| 청크 생성 | 새 지역 탐험이나 지도 렌더링 중 대량으로 발생한다 |
| 엔티티 과다 | 몹, 아이템, 마인카트, 호퍼가 밀집한 구역 |
| 플러그인의 메인 스레드 작업 | 데이터베이스 조회나 파일 입출력을 비동기로 처리하지 않는 플러그인 |
| 디스크 입출력 | 월드 저장과 백업이 겹치는 경우 |
| 호스팅 과점유 | 공유 호스팅에서 다른 이용자와 CPU를 나눠 쓰는 경우 |
조사 절차
- spark의
/spark health로 TPS, MSPT, GC 정지 시간을 확인한다. MSPT가 50밀리초를 넘는지 본다. /spark profiler start로 측정을 시작하고, 경고가 나타나는 동안 유지한 뒤/spark profiler stop으로 결과를 확인한다.- 결과에서 시간을 많이 쓰는 항목이 게임 자체인지 특정 플러그인인지 구분한다.
- GC 정지 시간이 길다면 가비지 컬렉터 설정을, 청크 관련 항목이 크다면
view-distance와simulation-distance를 검토한다.
하지 말아야 할 것
- 메모리만 늘리기 — 원인이 CPU나 디스크라면 효과가 없다.
- 엔티티 제거 플러그인부터 설치하기 — 증상을 가릴 뿐 원인은 남는다.
- 경고를 끄기 — 서버가 밀리고 있다는 사실 자체는 바뀌지 않는다.