2024년 9월 14일 토요일

Out of memory Error occurred in mapping runtime... 에러원인 및 해결방안 내용 정리

아래와 같은 에러가 발생될때에는 거의 인터페이스의 배치나 사이즈 그리고 타겟쪽 처리상태 등에 따라 발생되었던것 같음
failed to execute: MappingException: Out Of Memory Error occurred in mapping runtime, OutOfMemoryError: Java heap space(failed to allocate XXXXXXXX bytes) (max heap: XXXXMB)

AI로 정리해보았음

현상/원인

  • 한번에 처리할수 있는 메시지 수가 300개(처리스레드 100개 * 노드3개)
  • 300개는 단순히 스레드 수, 실제로 모든 메시지를 무조건 300개씩 처리할수 있는게 아님
  • 메시지 하나를 처리할수 있는데 필요 리소스에 따라 처리할수있는 양이 달라짐
  • OOM에러가 발생되었다는건 메모리가 부족하여 메시지를 처리할수 없다는 의미
  • 큰 메시지 사이즈는 시스템메모리를 더 많이 소모하게 만듬
  • 사용중인 스레드는 독립적으로 메시지를 처리할때 일정한 메모리를 사용하는데 동시에 처리되는 상황이라면 큰 메모리가 소모하게 됨
  • 매핑작업이 복잡할 경우 더 큰 메모리를 소모
  • 처리할수 있는 스레드 수와 상관없는 메모리 부족문제

해결책

  • Java heap메모리 크기를 증설
  • heap메모리는 Java System Properties에 Memory VM Parameters에서 확인 가능
  • 페이로드 크기를 줄이는것
  • 짧은 배치타임을 늘리거나 처리량을 분산
  • 최대 동시스레드 수를 줄여 메모리 소모를 제어

댓글 없음:

댓글 쓰기