ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java 성능 모니터링 ① - 서론
    JAVA공부/JAVA 2023. 9. 12. 02:55

    개발을 진행하면서 설정을 위해 성능을 측정해보거나 사용자의 경험을 위해 좋은 성능의 서비스를

    제공해야하는데, 이를 위해 모니터링을 해야하는 부분과 제공하는 프로그램(툴)들을

    Chat-GPT와 함께 확인(공부)해보도록 하자.

     

    1. 모니터링 목록

     

    1) CPU 사용량

     

    CPU 프로파일링: 가장 많은 CPU 시간을 소비(점유)하는 코드부분이나 메서드를 식별

     

     

     

     

    2) 메모리사용량

     

    힙 분석: Java 힙 메모리 사용량을 모니터링 하여 메모리 누수, 과도한 객체 생성, 불필요한 메모리 소비 식별

     

     

    GC 분석:  가비지 수집(GC) 로그를 분석하여 가비지 수집 설정을 최적화하고 stop-the-world를 최소화한다.

     

     

     

    3) 스레드 활동

     

    스레드 덤프 분석: 스레드 덤프를 캡처하고 분석하여 스레드 경합, 교착 상태 또는 장기 실행 스레드를 감지한다.

     

     

     

     

    4) I/O 작업

     

    병목 현상이 있는지 파일I/O 네트워크I/O 및 데이터베이스 쿼리를 모니터링한다.

     

     

     

    5) 성능 측정

     

    Jmeter와 같은 부하테스트기를 통해 TPS(초당 트랜잭션) 와 같은 사용자 정의 지표를 정의하고 수집한다.

    (분석 툴: Micrometer, Prometheous)

     

     

     

    2. 분석 툴

     

    1) VisualVM

    VisualVM 실행화면

    Java 애플리케이션을 위한 강력한 오픈 소스 성능 모니터링, 프로파일링 툴이다. Oracle JDK의 일부로 제공된다.

    제공되는 기능은 다음과 같다.

     

    ■ 실시간 모니터링 - CPU 사용량, 메모리 소비, 스레드 활동, 클래스 로딩 등을 그래픽으로 표시한다.

    ■ 스레드 분석 - 스레드 활동 검사, 상태 식별, 스택 추적, 교창상태 또는 장시 실행 스레드 감지

    ■ 힙 덤프 분석 - 힙 덤프를 캡처 및 분석하여 메모리 사용량

    ■ 프로파일링 - Java코드의 병목 현상을 식별하는 프로파일링 기능

    ■ 스레드 덤프 분석 - 스레드 덤프를 캡처하고 분석하여 개별 스레드 동작과 상호작용 이해

    ■ JMX 지원 - JMX(Java Management Extensions) 메트릭을 지원한다. (지표 시각화)

    ■ JFR과 통합 - JFR(Java Flight Recorder)로 실행되는 애플리케이션에 연결하여 JFR기록을 시각화하고 분석할 수 있다.

    ■ 플러그인 시스템 - 기능을 확장하거나 다른 도구와 통합할 수 있는 플러그인을 지원한다.

    ■ 원격 모니터링 - 원격 서버에서 실행되는 애플리케이션을 모니터링 및 진단할 수 있으며, 보안 통신 및 인증을 지원한다.

    ■ 힙 워커 - Java 힙 내용을 탐색, 개체를 검색하고 메모리 관련 문제를 분석할 수 있는 힙 워커 도구가 포함되어있다.

    ■ VisualGC - 가비지 수집 활동의 시각화를 제공한다.

    ■ VisualVM Launcher - VisualVM 프로파일링 및 모니터링이 활성화된 애플리케이션을 시작하는 간단한 방법을 제공한다.

     

     

     

     

    2) JConsole

     

    JConsole 실행화면

    Oracle JDK와 함께 번들로 제공되는 그래픽 모니터링 및 관리도구 이다.

    가볍고 사용이 쉬워 기본적인 실시간 모니터링, 관리 기능이 필요한 개발자, 관리자에게 선택된다.

    주요 기능은 다음과같다.

     

    ■ 실시간 모니터링 - 주요성능 지표(CPU 사용량, 메모리 소비, 가비지 수집 통계 및 스레드 활동) 모니터링

    ■ 메모리 관리 - 메모리 사용 패턴 분석, 메모리 풀 통계 확인, 메모리 추세를 관찰하여 메모리 누수 추적

    ■ 스레드 모니터링 - 스레드 수 , 스레드 상태 및 스택 추적, 스레드의 상태와 동작을 모니터링 (교착상태 , 오랜 기간 스레드 사용 확인)

    ■ MBean 지원 - JMX를 통한 관리 Bean(MBean)을 노출하는 애플리케이션에 대한 연결을 지원한다.

    ■ VM 요약 - JVM 메모리 사용량, 가비지 수집 활동 및 시스템 속성에 대한 개요를 제공한다.

    ■ 시각적 힙 덤프 - 애플리케이션의 시각적 힙 덤프를 생성할 수 있다.

    ■ 작업 수행 - MBean에 의해 노출된 작업을 호출 할 수 있다. 

    ■ 원격 JVM 연결 - 로컬 및 원격 JVM 연결 지원하여 프로덕션 환경에서 애플리케이션을 모니터링 진단할 수 있다.

    ■ 보안 통신 - 보안 소켓을 사용하여 원격 JVM을 연결할 수 있어 민감한 데이터가 안전하게 전송되도록 할 수 있다.

     

     

     

    3) JFR(Java Flight Recorder)

     

    JFR 실행화면

     

    JFR은 개발자와 시스템 관리자가 애플리케이션 성능에 미치는 영향을 최소화하면서 성능과 동작을 분석 할 수 있도록 설계되었다.

    이러한 성능 부하가 적은 특성은 프로덕션 환경에서 유용하다.

    Oracle JDK, OpenJDK 배포판의 일부로 제공된다.

    주요 기능은 다음과 같다.

     

    ■ 낮은 오버헤드 - 애플리케이션 성능에 최소한의 영향을 미치도록 설계, 소량의 경량 이벤트를 지속적으로 기록한다.

    ■ 지속적인 프로파일링 - 지속적인 데이터 수집으로 장기 실행 애플리케이션의 성능 문제와 병목현상을 진단한다.

    ■ 이벤트 기반 데이터 - 메소드 실행, 객체할당, 가비지 수집, 스레드 활동 및 I/O작업 같은 다양한 유형의 이벤트 기록

    ■ 사용자 정의 이벤트 - 사용자 정의 이벤트를 정의하여 세분화된 프로파일링 가능

    ■ 낮은 대기 시간 - 실시간 데이터를 제공하고 낮은 대기 시간을 갖도록 구성할 수 있다.

    ■ 비행 기록 - JVM을 다시 시작하지 않고도 비행기록(Flight Record)를 동적으로 시작하고 중지할 수 있다.

    ■ 데이터 분석 도구 - JMC(Java Mission Control) 및 VisualVM과 같은 도구를 사용하여 JFR데이터 분석 가능하다.

    ■ 프로덕션 프로파일링 - 프로덕션 환경에서 Java애플리케이션을 프로파일링하는데 매우 적합하다.

    ■ 안전하고 압축된 데이터 - JFR데이터는 프로파일링 데이터의 무결성을 유지하면서 저장 요구사항을 최소화한다.

    ■ 다른 도구와 통합 - VisualVM, JConsole등 타 애플리케이션 성능 모니터링(APM) 솔루션과 같이 사용할 수 있다.

     

     

     

     

    5) Prometheus

     

    시계열 데이터를 수집 및 저장하고 실시간 분석을 수행하며 해당 데이터를 기반으로 알림을 생성하도록 설계된

    오픈 소스 모니터링 및 알림 도구 키트이다.

    주요 기능 및 특성은 다음과 같다.

     

    ■ 시계열 데이터 수집 - 타임스탬프 값이 시퀀스인 시계열 데이터를 수집 및 저장한다.

    ■ 다차원 데이터 모델 - 다차원 데이터 모델을 사용하므로 측정항목에 키-값 라벨을 연결할 수 있다.

    ■ 풀 기반 모델 - 메트릭을 노출하는 대상에서 주기적으로 데이터를 스크랩하는 풀 기반 모델을 사용한다.

    ■ 쿼리 언어 - 쿼리 언어(PromQL)을 사용하면 메트릭 데이터를 검색, 집계 및 변환하는 표현형 쿼리를 작성할 수 있다.

    ■ 경고 - 경고 시스템이 내장되어있어 쿼리 및 임계값 기반으로 규칙을 정의할 수 있고, 조건 충족되면 경고를 트리거한다.

    ■ 스토리지 - 메트릭 데이터를 저장하기 위한 효율적이고 확장가능한 자체 시계열 데이터베이스를 보유하고 있다.

    ■ 서비스 검색 - 서비스 검색 메커니즘과 통합되어 동적, 컨테이너화된 환경을 쉽게 모니터링 가능하다.

    ■ 계측 라이브러리 - 다양한 프로그래밍 언어에 대한 클라이언트 라이브러리를 제공한다.

    ■ Grafana 통합 - 오픈 소스 시각화 및 대시보드 도구인 Grafana와 함게 사용될 수 있다.

    ■ 생태계 - 풍부한 생태계를 보유하고 있어 데이터베이스, 웹서버, 클라우드 서비스 등에 사용할 수 있는 내보내기 도구가 있다.

    ■ 확장성 - Prometheus는 중소 규모 환경을 모니터링하는데 적합하지만 장기 저장 및 수평 확장성을 위해 Thanos 혹은 Cortex와

    같이 사용하면 더 큰 모니터링 솔루션의 일부가 될 수 있다.

     

     

    ※ 시계열 데이터란?

    각 데이터 포인트가 특정 타임 스탬프 또는 시간 간격과 연결된 데이터 유형이다.

    연속적인 기간 동안 일정한 간격으로 수집, 기록 혹은 측정된 일련의 데이터포인트이며

    시간이 지남에 따라 데이터가 어떻게 변하는지 이해하는데 필수적인 데이터

     

     

     

     

    6) Grafana

    Grafana 실행화면

    모니터링, 성능 분석을 위한 대화형 및 사용자 정의 가능한 대시보드를 만드는데 사용되는 오픈 소스 다중 플랫폼 데이터

    시각화 및 모니터링 도구이다.

    다양 데이터 소스에 연결하고, 데이터를 쿼리하고, 시각화를 구축할 수 있다.

    시계열 데이터 및 메트릭을 표시하는데 널리 사용된다.

    주요 기능과 특징은 다음과 같다.

     

    ■ 데이터 소스 통합 - Prometheus, InfluxDB, Elasticsearch와 같은 시계열 데이터베이스, 관계형 데이터베이스, 클라우드 플랫폼 및

    사용자 정의 데이터소스 등 다양한 데이터 소스를 지원한다.

    ■ 쿼리 언어 지원 - 다양한 데이터 소스에 대한 쿼리 언어 지원을 제공해서 데이터를 쉽게 검색 및 조작할 수 있다.

    ■ 시각화 옵션 - 선형차트, 막대차트, 원형 차트, 테이블 등을 포함한 광범위한 시각화 옵션을 제공한다.

    ■ 동적 대시보드 - 동적이고 대화형 대시보드를 가지고 있다.

    ■ 경고 및 알림 - 조건에 따라 경고를 트리거하여 알림을 보낼 수 있다.

    ■ 플러그인 및 확장성 - 플러그인 생태계를 갖추고 있어 다양한 기능을 확장할 수 있다.

    ■ 사용자 인증 및 권한 부여 - 사용자 인증 및 역할 기반 엑세스(RBAC)를 지원한다.

    ■ 교차 플랫폼 - 윈도우, 리눅스, 맥 을 포함한 다양한 운영체제에 배포할 수 있다.

    ■ 커뮤니티 및 커뮤니티 대시보드 - 커뮤니티에서 제공한 대시보드를 가져와서 모니터링 활동을 할 수도 있다.

     

     

     

    7) Pinpoint

     

    Pinpoint 실행 화면

    Naver에서 개발한 오픈 소스 애플리케이션 성능 관리(APM)도구이다.

    성능 모니터링과 분산 , 마이크로 서비스 기반 환경에서 병목현상과 문제를 정확히 찾아내는데 도움을 주기 위해 개발되었다.

    주로 Java, .NET 애플리케이션에 중점을 두고 있어서 다른 언어 , 기술이 포함되어있는 경우 다른 APM솔루션을 찾아보는 것이 

    좋을 수 있다.

    주요 기능은 다음과 같다.

     

    ■ 분산 추적 - 애플리케이션 스택을 통해 흐르는 요청을 추적할 수 있다. 여러 서비스 트랜잭션을 추적하여 병목현상과 성능문제를

    식별하는데 도움을 준다.

    ■ 실시간 모니터링 - 성능 지표의 실시간 모니터링 및 시각화를 제공한다.(대시보드)

    ■ 최종 사용자 모니터링 - 응답 시간, 오류, 사용 패턴을 포함하여 최종 사용자 경험에 대한 데이터를 수집할 수 있다.

    ■ 경보 및 경고 - 성능 임계값, 이상 현상을 기반으로 경보 및 경고를 설정할 수 있다.

    ■ 코드 수준 분석 - 애플리케이션내의 특정 메서드나 코드 블록까지 성능 병목현상을 식별할 수 있도록 도와준다.

    ■ 호출 스택 시각화 - 트랜잭션의 호출 스택을 시각화하여 다양한 구성요소와 서비스가 상호작용하는 방식을 보여준다.

    ■ 다양한 프레임 워크 지원 - 다양한 애플리케이션 프레임워크 및 라이브러리를 지원한다. (Java, .NET 등)

    ■ 통합 -  Grafana, Prometheus와 같은 모니터링 및 경고 도구와 통합되어 포괄적인 모니터링, 경고 솔루션을 제공한다.

     

     

     

    8) Spring Boot Admin

     

    Spring Boot Admin 실행화면

    Spring Boot 애플리케이션을 관리하고 모니터링 하기 위한 웹기반 오픈 소스 프로젝트이다.

    마이크로 서비스 아키텍처 처럼 중앙 집중식 관리도구가 필요한 경우 유용하다.

    주요 기능은 다음과 같다.

     

    ■ 대시보드 - 사용자 환경에 등록된 모든 Spring Boot 애플리케이션에 대한 정보를 표시하는 대시보드를 제공한다.

    ■ 애플리케이션 세부정보 - 애플리케이션 이름, 버전, 환경속성, JVM정보등을 확인 할 수 있다.

    ■ 로깅 - 대시보드에서 직접 애플리케이션 로그를 보고 다운로드 할 수 있다.

    ■ 메트릭 - 메모리 사용량 , CPU 사용률 및 사용자 지정 메트릭과 같이 애플리케이션 메트릭을 모니터링 할 수 있다.

    ■ 환경 관리 - 애플리케이션의 환경속성을 동적으로 관리하는 방법을 제공해서 애플리케이션을 다시 배포하지 않고도

    구성 속성을 수정할 수 있다.

    ■ JMX 통합 - JMX와 통합되어 애플리케이션에서 노출된 JMX Bean 작업에 엑세스하고 관리 할 수 있다.

    ■ 이벤트 알림 - 이메일 알림을 보내거나 알림 메커니즘을 사용하여 관리자에게 애플리케이션 상태 변경 또는 중요한 이벤트에 대해

    경고할 수 있다.

    ■ 보안 - 관리 콘솔에 대한 엑세스를 제한하는 기본 보안 기능을 지원한다.

     

     

     

     

     

     

    짤막 지식

     

    1. Micrometer란?

     

    ■ 목적: 애플리케이션 성능, 동작 및 사용자 정의 비즈니스 지표등을 기록하고 제공하기 위한 쉬운 API를 제공한다.

    ■ 사용사례: 주 용도로는 요청 대기시간, 오류율, 데이터베이스 쿼리성능, 맞춤형 애플리케이션 지표 등을 추적하는데 사용한다.

    ■ 세분성: 주로 애플리케이션 수준 메트릭과 관련이 있고 하위 수준 JVM 내부에 대한 직접적인 엑세스를 제공하지 않기 때문에

    JMX에 비해 더 높은 추상화 수준에서 작동한다.

    ■ 통합: 다양한 모니터링 시스템 및 백엔드와 통합을 지원한다. (JMX와 보완해서 사용)

     

     

    2. JMX란?

     

    ■ 목적: JVM내의 리소스를 관리하고 모니터링하기 위한 Java기술이다.

    ■ 사용사례: 메모리 사용량, 가비지 수집, 스레드 관리, 런타임 매개변수 등 JVM자체 측면을 모니터링하고 제어할 수 있다.

    ■ 세분성: JVM에 대한 분석을 중점에 두고 있다.

    ■ 표준화: Java 애플리케이션에 대한 관리 인터페이스를 표준화하고 있다.

     

     

Designed by Tistory.