(Java heap space에서 넘어옴)

OutOfMemoryError: Java heap space마인크래프트 서버가 할당받은 힙 메모리를 모두 사용해 더 이상 객체를 만들 수 없을 때 발생하는 오류이다. 대개 서버가 정지하거나 응답하지 않는 상태가 된다.

메모리를 늘리는 것이 첫 번째 대응으로 알려져 있으나, 원인이 메모리 누수라면 늘려도 발생 시점만 늦어질 뿐이다. 얼마나 빨리 다시 발생하는지가 판단 기준이 된다.

원인 구분

양상 해석
접속자가 늘어난 시점에 발생 실제로 메모리가 부족하다. 할당량 조정이 필요하다
가동 시간이 길어질수록 반복 발생 메모리 누수를 의심한다. 대개 플러그인이 원인이다
특정 작업 중에만 발생 대량 월드 편집, 지도 렌더링, 백업 등 해당 작업의 설정을 조정한다
메모리를 늘려도 곧 재발 할당량 문제가 아니다

조사

/spark heapsummary로 어떤 종류의 객체가 힙을 차지하고 있는지 확인할 수 있다. 특정 플러그인의 클래스가 비정상적으로 많다면 그 플러그인을 우선 검토한다.

JVM 실행 인자에 다음을 추가하면 오류 발생 시 힙 덤프를 남긴다.

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/경로/dumps

덤프 파일은 힙 크기만큼 커질 수 있으므로 저장 공간을 확인한 뒤 사용한다.

흔한 원인

  • 과도한 view-distance·simulation-distance — 불러온 청크 수에 비례해 메모리를 사용한다
  • 청크를 계속 붙잡아 두는 플러그인 — 지도 렌더링, 좌표 이동, 자동 농장 관련 플러그인
  • 대량 엔티티 — 아이템이나 몹이 정리되지 않고 누적되는 구역
  • 지나치게 큰 할당량 — 물리 메모리보다 크게 잡으면 스왑이 발생해 오히려 불안정해진다

할당량 조정

-Xms-Xmx를 같은 값으로 두고, 물리 메모리에서 운영체제와 다른 프로세스가 쓸 몫을 남긴다. 8GB 장비에서 서버에 8GB를 모두 주면 안 된다.

같이 보기