////
Search

7. JVM 성능 분석 사례

Created
2022/09/23 08:54
Tags
JVM

1. 과도한 SQL Fetch의 의한 OOME 발생 사례

원인

대량의 SQL Fetch를 수행해 가용 Heap 메모리를 소진하여, 그에 따라 Full GC가 발생해 어플리케이션 수행이 지연된 경우
어플리케이션 수행 → 대량의 SQL Fetch 수행 → 힙메모리 소진 → Full GC/OOME 발생 → 어플리케이션 수행 지연

모니터링 확인

모니터링 툴에서 액티브 트랜잭션의 건수가 매우 높고, 힙메모리가 부족한 현상을 확인할 수 있음
힙 메모리 여유량이 지속적으로 줄어드는 시점의 애플리케이션 내용을 확인

해결 방안

튜닝되지 않은 쿼리의 튜닝
장기간의 데이터 조회쿼리 튜닝

2. Full GC 수행에 따른 애플리케이션 슈행 지연 발생

원인

특정 애플리케이션이 SQL 호출 시에 대량의 결과 Row를 Fetch하여 JVM 힙 메모리를 소진시킨 사례
Full GC 수행시에 STW(Stop The World)에 의한 애플리케이션 수행 중단과 수행시간 지연
어플리케이션 수행 → 대량의 SQL Fetch 수행 → 힙메모리 소진 → Full GC 발생 → 어플리케이션 수행 지연

모니터링 확인

응답지연 모니터링
응답지연 구간의 성능 모니터링을 통해서 메모리 점유 원인 확인

해결 방안

수행중인 SQL 텍스트 및 바인드값을 추출해 담당자에게 전달

주의점

패치 회수가 과도하게 높다으면 항상 힙 메모리를 많이 점유한다고 생각할 수 있지만 이는 아님
ResultSet의 컬럼 개수가 적고 컬럼의 크기가 작다면 메모리 점유가 크지 않을 수 있기 때문
보다 정확한 원인 분석을 위해서는 APM에서 제공하는 메모리 누수 추적 기능이나 힙 덤프 분석 등을 활용하는 것도 한 방법

3. 특정 오브젝트의 메모리 과다 사용으로 인한 OOME 발생

원인

특정 오브젝트의 메모리 과다 보유로 OOME가 발생
어플리케이션 수행 → 특정 Object 메모리 점유 → 힙메모리 소진 → Full GC 발생 → 어플리케이션 수행 지연

모니터링 확인

성능 추이 분석에서 Full GC가 발생했음에도 old영역 메모리 해제가 되지 않으며 서비스 지연 발생을 확인
old영역의 사용량이 급격하게 증가하며 Full GC가 지속적으로 발생
메모리 누수의 원인이되는 오브젝트가 GC대상이 되지 않는 경우를 의심
트랜잭션 상세 화면을 통해서 콜스택을 분석

해결

로직 수행 중 에러가 발생한 경우에 사용한 오브젝트 정리 로직 구현
사용이 끝난 Object가 GC 대상에서 누락되지 않도록 정리하는 로직 구현

4. 소켓 타임아웃에 의한 서비스 지연발생 사례

원인

외부 환경의 영향을 받아 애플리케이션 수행이 지연된 경우로 네트워크 구간에서 발생된 이슈에 의한 성능 지연
어플리케이션 수행 → UI 프레임워크 통신지연 → 어플리케이션 수행 지연 → Socket Timeout Exception 발생

모니터링 확인

트랜잭션 조회 화면에서 Exception이 발생한 어플리케이션만 필터링해 확인
스택 트레이스로 Exception의 명확한 원인 분석
발생한 Exception의 Root Cause 내용을 살펴보면 Socket Read Timeout을 확인

해결

UI 전송지연이 판별되었으니 방어코드를 추가하여 문제를 사전에 예방하고 성능지연이나 장애를 즉각 파악하도록 노력

5. Exception이 발생하며 서비스 수행에 실패

원인

SQL수행 관련 메소드에서 이셉션이 발생하여 애플리케이션의 수행이 실패
어플리케이션 수행 → SQL 수행 메소드에서 NPE 에러 발생 → 어플리케이션 정상 수행 실패

모니터링 확인

트랜잭션 조회 화면에서 Exception이 발생한 어플리케이션만 필터링해 확인
스택 트레이스로 Exception의 명확한 원인 분석
발생한 Exception의 Root Cause 내용을 살펴보면 NPE을 확인

해결

객체가 제대로 생성되지 않은 상태에서 참조하려고 한건지 확인
객체의 초기화가 잘못되었는지 확인

6. SQL 수행 지연에 따른 애플리케이션 지연 현상

원인

모니터링 확인

해결

7. DB Lock에 의한 애플리케이션 지연 현상

원인

모니터링 확인

해결