아래와 같은 에러가 발생될때에는 거의 인터페이스의 배치나 사이즈 그리고 타겟쪽 처리상태 등에 따라 발생되었던것 같음
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에서 확인 가능
- 페이로드 크기를 줄이는것
- 짧은 배치타임을 늘리거나 처리량을 분산
- 최대 동시스레드 수를 줄여 메모리 소모를 제어
댓글 없음:
댓글 쓰기