티스토리 뷰
API 서버 운영 중 아래와 같이 OOM 오류가 나면서 k8s 파드가 재시작 되는 현상이 발생함.
java.lang.OutOfMemoryError: Java heap space
애플리케이션 상태를 보면 순간적으로 old 영역 used memory가 max까지 사용되는 모습이 보입니다.
heap dump 파일을 남겼고 MAT(Eclipse Memory Analyzer) 로 파일을 분석합니다.
MAT에서 아래와 같이 Leak이 의심되는 부분을 친절히 알려줍니다.
아래와 같이 BoundedConcurrentHashMap 에 데이터가 많습니다.
hibernate 5.2.17 을 사용하고 있었고 hibernate 5.2.18 버전에서 메모리 사용량 개선이 있었고
아래 설정을 적용해서 in 절 쿼리 플랜을 최적화시켰습니다.
spring.jpa.properties.hibernate.query.in_clause_parameter_padding=true
그 뒤에도 다시 또 OOM이 나서 확인해보니 원인은 사용자 목록을 가져오는 부분이 있는데 페이징 처리 되어 있지 않고 전체 데이터를 가져와서 문제가 발생했습니다.
참고
docs.jboss.org/hibernate/orm/5.4/javadocs/constant-values.html
https://thorben-janssen.com/hibernate-5-3/
https://kwonnam.pe.kr/wiki/java/hibernate/performance
https://www.manty.co.kr/bbs/detail/develop?id=
반응형
댓글