글 검색

공개된 글의 제목과 본문을 검색합니다.

    닫기 Esc

    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에 의한 애플리케이션 지연 현상#

    원인#

    모니터링 확인#

    해결#


    전체 글 둘러보기