JEUS Bug에 의한 OutOfMemoryError 현상 - WAS Troubleshooting 사례(3)
백엔드
JEUS Bug에 의한 OutOfMemoryError 현상 - WAS Troubleshooting 사례(3)
두줄요약
JEUS 내부 모듈의 비정상적인 byte 배열 할당으로 OutOfMemoryError가 발생했습니다. 로그 교차 분석과 역컴파일을 통해 원인을 찾고 패치 적용으로 해결했습니다.
문제 상황
- 6대 JEUS 인스턴스 클러스터에서 간헐적 OutOfMemoryError와 Hang-up 발생
- 발생 시점과 패턴에 규칙성이 없어 로그 기반 원인 추적 필요
- Heap 여유가 큰데도 OOME가 발생하는 모순적 상황
원인 분석
- Thread dump의 MEMINFO에서 Heap 2GB 중 약 1.5GB가 Free 상태
- GC log에서 메모리 누수보다 특정 트랜잭션의 대용량 할당 실패 가능성 확인
- threadId 교차 추적 결과 JEUS 내부 모듈 LoginInformation.readLoginInformation()에서 약 1.9GB byte 배열 요청
- 역컴파일 분석으로 scope 문자열 처리 과정의 비정상적 대용량 메모리 요청 확인
해결 방법
- GC log와 thread dump를 교차 분석해 문제 트랜잭션과 내부 모듈 식별
- Tmax사에 이슈 제기 후 패치 적용
- 송신측 byte array만 전달하도록 내부 로직 개선 패치 반영
