본문 바로가기
인턴일지

[인턴일지 #5] Java Profiling, Profilers

by seoyamin 2023. 10. 28.

1. Java Profiler

  • 등장 배경
    • 프로그램 규모가 커지거나 복잡해지면 모든 JVM Internal Components가 효율적인지 모니터링 어려움
  • 특징
    • Memory Usage, Garbage Collection, CPU Utilization 등을 분석
    • JVMTI 이용
    • 주로 Agent - Server - UI 구조

 

2. Java Profiling Tools 

APM (Application Performance Management)

 

  Pinpoint Scouter VisualVm
형태 Web Client Standalone Client Standalone Client
Plugins
저장소 HBase compressed files  
Agent Java Agent  Host Agent (OS Agent)
- CPU, Memory, Disk

• Java Agent
- Heap, Thread, Service
JMX Agent
Overview 
Map
Server Map Object Map X
Heap Dump 불가능 가능 가능
Thread Dump 가능 가능 가능

 

2-1. Pinpoint

2-1-1. 개요

  • 제공 기관 : Naver
  • 제공 형태 : Web Client
  • Support OS : Linux
  • Support Language : Java, PHP, Python

 

2-1-2. Architecture

  • Pinpoint Agent : JVM에서 Application의 profile data를 수집하는 agnet
  • Pinpoint Collector : 모니터링 결과를 처리하는 server
  • Pinpoint Web : 모니터링 결과를 가시적으로 제공하는 UI
  • HBase Storage : 모니터링 데이터 저장하는 DB

 

 

2-1-3. 기능

① Server Map

  • Application Server를 둘러싼 relationship 나타냄
  • 각 Component를 Node처럼 표현

 

② Call Stack

  • 각 Transaction마다 code level로 모니터링 가능
  • bottleneck, failure 원인 분석 가능

 

③ Inspector

  • Heap / Non-heap Memory Usage
  • CPU Usage

 

2-1-4. Pinpoint 특징

  • 분산 트랜잭션 추적 기법 
    • 분산된 요청을 하나의 트랜잭션으로 처리
    • Span, Trace, TraceId 이용 (메세지간의 관계 파악)

      Span    - RPC(Remote Procedure Call) 추적을 위한 기본 단위
         - RPC 도착 시 처리한 작업의 목록
         - 각 Span은 TraceId 가짐
      Trace    - 연관된 Span의 집합
         - 동일한 집합에 소속된 Span들은 TransactionId (=TxId) 동일
      TraceId     - TransactionId, SpanId, ParentId 키의 집합

 

  • HBase를 이용하여 수집한 데이터 저장할 때 상수 테이블 활용
    • 반복해서 수집되는 메서드는 아이디 - 메서드 정보 형태로 상수 테이블에 저장
    • 다시 조회할 경우, 해당 테이블에서 정보 찾아서 재조합 (cache 역할)

 

 

2-2. Scouter

2-2-1. 개요

  • 제공 기관 : LG CNS
  • 제공 형태 : Standalone, Web API Dashboard (Scouter Paper)
  • Support OS : Windows, Linux, Unix
  • Support Language : Java

 

2-2-2. Architecture

  • Host Agent : CPU, Memory, Disk 관련 정보 수집
  • Java Agent : Heap, Thread 관련 정보 수집
  • Collector (Server) : Agent가 보낸 데이터 처리
  • Viewer (Client) : 결과 모니터링을 위한 UI

 

2-2-3. 기능

① User Monitoring 

  • Recent User : 각 인스턴스 별 최근 5분간 방문한 Unique User
    • Concurrent User 측정이 어려워서 대체용으로 설정한 개념
    • 'Concurrent' 측정 과정에 Response Time이 포함되기 때문에 측정 어려움
      ex) 장애 발생 시점에 Concurrent User 500명
        [case 1] 장애 발생이 원인 → Concurrent User 500명이 결과
        [case 2] Concurrent User 500명이 원인 → 장애 발생

 

 

② Services Monitoring

  • TPS (Transaction per Second)
  • XLog Chart (Response Time of Transaction)

 

 

③ Resources Monitoring

  • CPU Usage
  • Heap Used

 

2-2-4. 특징

  • 수집 데이터 타입에 따라 다른 Agent 사용
    • Host Agent - OS 관련 데이터 (CPU, Memory, Disk)
    • Java Agent - Tomcat 관련 데이터 (Heap, Thread, Service)
  • 다양한 Configuration Options 제공

 

 

2-3. VisualVM

2-3-1. 개요

  • 제공 기관 : Oracle
  • 제공 형태 : Standalone, IDE Plugin
  • Support OS : Windows, Linux, macOS
  • Support Language : Java

 

2-3-2. Architecture

  • Agent : JMX Agent
    • Java Management Extensions
    • Remote Host를 모니터링할 때 사용됨
  • Protocol : RMI
    • Remote Method Invocation
    • VisualVM - MBean Server 통신에 관여

 

 

2-3-3. 기능

① Monitor (CPU Usage, Heap, Metaspace, Classes)

 


② Threads (All, Live, Daemon, Finished Threads)

 


③ Sampler (CPU, Memory)

 

 


④ Profiler 
(CPU, Memory)

 

2-3-4. 특징

  • JMX Agent (Java Management Extensions) 이용
  • jdk 8까지는 jdk에 빌트인 되어있음

'인턴일지' 카테고리의 다른 글

[인턴일지 #7] 인턴 끝!  (0) 2024.01.01
[인턴일지 #6] Java GC, Heap Dump  (0) 2023.10.28
[인턴일지 #4] JVM, JVMTI  (0) 2023.10.04
[인턴일지 #3] 자사 도구 분석  (0) 2023.09.19
[인턴일지 #2] 프로젝트 정리  (0) 2023.09.19