인스턴스 성능 관리 활용하기
인스턴스 성능 관리 메뉴는 애플리케이션의 환경을 확인하고 성능을 관리하는데에 유용한 기능을 제공합니다. 인스턴스 성능 관리에서 자주 사용하는 주요 메뉴 상세 및 활용 예시를 다음과 같이 안내합니다.
로딩된 클래스
홈 화면 > 프로젝트 선택 > 인스턴스 성능 관리 > 로딩된 클래스
로딩된 클래스 메뉴는 애플리케이션에 로딩된 클래스의 구조와 메소드 시그니처 등 상세 정보를 제공하고 또한 중단없는 클래스 동작 변경이 가능하도록 재정의 기능을 제공합니다.
재정의
재정의는 Instrumentation
의 redefineClasses
메소드를 호출하여 애플리케이션을 중단시키지 않고도 런타임 중에 이미 로딩된 클래스의 동작을 변경할 수 있게 합니다. 이는 운영 중인 서비스에 대한 수정이나 변경이 필요한 경우 유용합니다. 예를 들어 새로운 서비스 패턴 지정으로 추가적인 트랜잭션 시작점을 설정하고 응답 시간을 측정하고자 할 때, 관련된 와탭 설정 변경 후 해당 클래스를 로딩된 클래스 목록에서 찾아 아이콘을 클릭해 재정의할 수 있습니다.
리소스
리소스 컬럼을 통해 해당 클래스가 물리적으로 어느 파일에서 로딩되었는지 조회할 수 있습니다. 자바 애플리케이션의 다계층 구조 특성상 이와 같은 리소스 정보 확인이 필요합니다. 복잡한 애플리케이션 환경에서는 클래스가 정확히 어느 jar 파일에서 로딩되었는지 파악하는 것이 중요합니다.
특정 클래스가 의도하지 않은 jar 파일에서 로딩된 경우 예상치 못한 동작이나 버그가 발생할 수 있습니다. 특히 클래스패스가 복잡하거나 다중 모듈 환경에서 정확히 어느 경로에서 로딩되었는지 확인하여 디버깅을 용이하게 할 수 있습니다.
스레드 목록/덤프
홈 화면 > 프로젝트 선택 > 인스턴스 성능 관리 > 스레드 목록/덤프
스레드 목록/덤프 메뉴는 현재 실행 중인 스레드 목록을 확인하고 해당 스레드의 개별 스냅샷 및 전체 스레드 덤프 정보를 조회할 수 있습니다. 히트맵이 트랜잭션 응답 시간 위주 최적화 작업의 핵심이라면 스레드 목록/덤프는 CPU 최적화의 핵심 요소라고 할 수 있으며 이는 애플리케이션의 성능 최적화, 문제 진단, 그리고 안정성 유지에 중요한 역할을 합니다.
어떤 스레드가 CPU를 많이 사용하고 있는지 파악하는 것은 병목 발생 원인 식별에 있어 중요합니다. 특히 특정 시간대에 CPU 사용이 급증한 스레드 식별을 위해 시계열 데이터를 조회할 수 있어야 합니다. 스레드 목록/덤프 메뉴의 스레드 CPU 시간은 해당 스레드가 CPU를 점유한 총 누적 시간을 의미합니다. 새로 고침 시 현재 스레드 CPU 시간과 기존 스레드 CPU 시간의 차이인 증가량을 제공하여 조회 시점에 가장 많이 CPU를 사용하고 있는 스레드를 특정할 수 있습니다. 증가량 컬럼을 클릭해 내림차순 정렬 방식으로 증가량이 가장 높은 스레드를 확인해 보세요.
이렇게 스레드 특정 후 해당 스레드 스냅샷을 확인해 자주 호출되거나 오래 실행되는 메소드 등을 찾아낼 수 있습니다. 이를 통해 이상 징후를 조기에 발견하고 대응하여 시스템을 안정적으로 관리할 수 있습니다.
CPU 사용량이 높은 스레드 확인
애플리케이션 CPU 사용량이 급증한 경우는 여러가지 원인에 기인할 수 있습니다. 이를 힙 메모리가 가득 찬 경우, 실제 요청이 많은 경우, 그리고 로직 문제인 경우 세 가지 유형으로 분류할 수 있습니다.
이때 가장 먼저 확인하는 것은 식별이 용이한 힙 메모리입니다. 힙 메모리가 가득 찬 경우 JVM이 GC를 빈번히 실행해 CPU 사용량이 급증할 수 있습니다. 이 경우 애플리케이션 대시보드의 힙 메모리 그래프를 통해 쉽게 확인할 수 있습니다. 두 번째는 실제 요청이 많은 것으로 애플리케이션이 많은 수의 클라이언트 요청을 처리해 CPU 사용량이 높아진 경우입니다. 각 요청은 자바 스레드를 생성해 처리되기에 CPU가 많은 작업을 수행하게 됩니다. 이 경우 애플리케이션 대시보드에서 TPS 관련 지표를 통해 확인할 수 있습니다.
세 번째로 애플리케이션 코드에 비효율적인 알고리즘이나 무한 루프 등이 포함되어 있을 경우 CPU 사용률이 비정상적으로 높아질 수 있습니다. 이 경우 스레드 목록/덤프 메뉴를 통해 CPU 사용량이 높은 스레드를 특정 후 해당 스레드 덤프를 확인해 문제가 되는 코드를 확인할 수 있습니다.
스레드 CPU 시간 확인 → 새로고침 → 증가량 기준으로 목록 정렬 → CPU 사용량 높은 스레드 식별