53. Endpoints

Actuator 엔드 포인트를 사용하면 애플리케이션을 모니터링하고 상호 작용할 수 있습니다. Spring Boot에는 여러 내장 엔드 포인트가 포함되어 있으며 사용자가 직접 추가 할 수 있습니다. 예를 들어 health

health 란 : spring boot 의 상태정보 중 하나?

위와 같은 내용의 애플리케이션의 상태를 확인할 수 있다. 예를 들어 GET /actuator/health를 실행해보자. 아래와 같이 현재 애플리케이션의 health 상태를 알 수 있다.

{"status": "UP"}

각 개별 엔드 포인트를 활성화 또는 비활성화 할 수 있습니다 . 이는 엔드 포인트가 작성되고 해당 Bean이 응용 프로그램 컨텍스트에 존재하는지 여부를 제어합니다. 원격으로 액세스하려면 엔드 포인트도 JMX 또는 HTTP를 통해 노출 되어야 합니다. 대부분의 응용 프로그램은 접두사와 함께 끝점의 ID가 /actuator URL에 매핑되는 HTTP를 선택합니다 . 예를 들어, 기본적으로 health엔드 포인트는 /actuator/health

다음과 같은 기술에 구애받지 않는 엔드 포인트를 사용할 수 있습니다.

신분증

기술

기본적으로 활성화

auditevents

현재 응용 프로그램에 대한 audit(심사?감사?) 이벤트 정보를 노출합니다.

beans

애플리케이션에있는 모든 Spring Bean의 전체 목록을 표시합니다.

caches

사용 가능한 캐시를 노출합니다.

conditions

구성 및 자동 구성 클래스에서 평가 된 조건과 해당 클래스가 일치하거나 일치하지 않는 이유를 표시합니다.

configprops

모든 @ConfigurationProperties의 조합 된 목록을 표시합니다 .

env

SpringConfigurableEnvironment에서 속성을 노출합니다.

flyway

적용된 Flyway 데이터베이스 마이그레이션을 표시합니다.

health

응용 프로그램 상태 정보를 표시합니다.

httptrace

HTTP 추적 정보를 표시합니다 (기본적으로 마지막 100 개의 HTTP 요청-응답 교환).

info

임의의 응용 프로그램 정보를 표시합니다.

integrationgraph

스프링 통합 그래프를 보여줍니다.

loggers

응용 프로그램에서 로거의 구성을 표시하고 수정합니다.

liquibase

적용된 Liquibase 데이터베이스 마이그레이션을 표시합니다.

metrics

현재 애플리케이션에 대한 '메트릭'정보를 표시합니다.

mappings

모든 @RequestMapping경로 의 조합 된 목록을 표시 합니다.

scheduledtasks

응용 프로그램에서 예약 된 작업을 표시합니다.

sessions

스프링 세션 지원 세션 저장소에서 사용자 세션을 검색하고 삭제할 수 있습니다. 반응 형 웹 애플리케이션에 대한 Spring Session의 지원을 사용할 때는 사용할 수 없습니다.

shutdown

응용 프로그램이 정상적으로 종료되도록합니다.

아니

threaddump

스레드 덤프를 수행합니다.

Flyway는 오픈소스 Database 마이그레이션 Tool이다.

애플리케이션이 웹 애플리케이션 (Spring MVC, Spring WebFlux 또는 Jersey) 인 경우 다음 추가 엔드 포인트를 사용할 수 있습니다.

신분증

기술

기본적으로 활성화

heapdump

hprof힙 덤프 파일을 반환 합니다.

jolokia

JMX Bean을 HTTP를 통해 노출합니다 (Jolokia가 클래스 경로에 있고 WebFlux에서는 사용할 수없는 경우).

logfile

logging.file또는 logging.path속성이 설정된 경우 로그 파일의 내용을 반환합니다. 로그 파일 내용의 일부를 검색하기 위해 HTTP Range헤더 사용을 지원합니다 .

prometheus

Prometheus 서버에서 스크랩 할 수있는 형식으로 메트릭을 노출합니다.

Actuator의 엔드 포인트 및 요청 및 응답 형식에 대한 자세한 내용은 별도의 API 설명서 ( HTML 또는 PDF ) 를 참조하십시오 .

hprof 힙 덤프 파일이란.

우선 Heap이란 Java에서 사용하는 object들을 저장하는 공간입니다. 물론 Heap이란 용어가 꼭 Java에서만 사용되는 용어는 아닙니다.Unix에서 Native 즉 C에서 malloc()으로 할당되는 메모리 영역을 Heap(예전에 공부할때 자유저장소 라고도 했었죠 ^^)이라고 말합니다. 물론 Java에서 사용하는 Heap 메모리도 Native 영역의 프로세스 메모리에 생성됩니다.Java에서 Heap은 Java가 관리하는 별도의 메모리 공간이라고 보면 될 것같습니다. 이후에서 말하는 Heap은 모두 Java Heap을 의미하도록 하겠습니다.Heap에는 java object 정보만 저장되는 것이 아니고 class 메타 정보 및 각 object들에 대한 참조 정보도 담겨 있습니다.Heap 메모리에 존재하는 모든 object는 Root 노드부터 시작해서 parent/child 형식의 tree 구조를 형성하고 있습니다. 이러한 tree 구조는 각 object들의 참조 정보를 통해 이루어집니다. tree 구조가 꼭 정형화된 top/down 방식의 구조로만 이루어지지 않고 간혹 역참조에 의해 상호 참조가 발생하기도 합니다.

Heap의 정보를 분석하는 것은 java에서의 메모리 문제(각종 OutOfMemoryError 문제들)를 해결하기 위한 중요한 작업입니다. Java가 메모리 사용에 있어서 메모리 할당/해제에 대한 기능을 java가 자체적으로 지원(Garbage Collection)하여 다른 언어(C, C++등) 보다 개발의 편의성을 제공하지만 이에 따른 메모리에 대한 문제점을 항시 내포하고 있는 것이 사실입니다. 이러한 문제점을 해결하기 위해서 Heap을 분석하는 것이 많은 도움을 줍니다. -> 분석하기위해 생성하는 게 Heap dump

각 Java 벤더별로 Heap dump를 생성하는 방법과 그 내용이 조금씩 다른데요. 크게 IBM 계열과 Sun 계열로 나눌 수 있습니다. 예를 들어 두 계열의 Heap dump의 가장 큰 차이점은 object에 대한 데이터를 포함하느냐 안하느냐의 차이가 있습니다. Sun 계열을 object에 대한 데이터들을 모두 담고 있으며, IBM 계열은 그렇지 않고 object들에 대한 참조 정보만 담겨 있습니다.

자, 그럼 이러한 Heap dump를 통해 분석할 수 있는 문제점에는 어떤것들이 있을까요 ?

첫번째로 OutOfMemoryError에 대한 문제를 분석하는 것입니다.Heap dump로 할 수 있는 가장 중요하고도 기본적으로 해결할 수 있는 문제입니다.

두번재로 Permanent Full에 대한 문제 분석입니다.loaded class의 메타정보들에 대한 정보를 분석하므로써 Permanent Full 문제에 대한 분석이 가능합니다.물론 Permanent Full도 일종의 OutOfMemoryError라고 할 수 있습니다.

세번째로 메모리 Leak 문제 분석입니다.메모리 Leak이 지속되면 OutOfMemoryError가 되지만 OutOfMemoryError가 발생하지 않고 많은 메모리를 점유하고 해제되지 않고 있어 GC의 빈도가 잦아져 문제가 발생되는 경우에 Heap dump를 통해 해제되지 않는 object들을 확인할 수 있습니다.

네번째로 기타 Heap과 관련된 문제 분석입니다.복합적인 원인으로 문제가 발생할 경우 문제 분석을 위한 하나의 정보로서 Heap dump를 활용할 수 있습니다.예들들어 자원 미해제로 인해 finalizer가 지속적으로 수행되어 CPU 과부하가 발생한 경우입니다. 위와 같은 문제에 대한 분석은 앞으로 차차 사례를 통해 분석 방법을 알아 보도록 하겠습니다.

이제 부터 Heap dump를 어떻게 생성하는지에 대해 Java 계열별로 설명드리도록 하겠습니다. 먼저 Sun Java에서 Heap dump를 생성하는 방법입니다. 다음과 같은 방법으로 Heap dump를 생성할 수 있습니다.

- HPROF 옵션과 함께 JVM을 기동한 경우

- HeapDumpOnOutOfMemoryError 옵션과 함께 JVM을 기동한 경우

- HeapDumpOnCtrlBreak 옵션과 함께 JVM을 기동한 경우- jmap 명령어를 통한 Heap dump 생성

- HPROF 옵션과 함께 JVM을 기동한 경우

HPROF는 JVM에서 제공하는 profiling 기능으로 JVMTI(Java Virtual Machine Tool Interface)를 사용하여 JVM과 interface하는 dynamically-linked library 입니다.HPROF는 profiling 기능을 내재하고 있기 때문에 CPU 사용율, Java heap allocation 상태, monitor contention, thread 상태등에 대한 정보를 제공합니다. 일반적으로 이러한 기능들을 제공하는 툴을 Java Profiler라고 합니다.실제로 HPROF는 performance, lock contention, memory leak 및 기타 다양한 문제를 분석하는데 효과적으로 활용됩니다. HPROF를 통한 어플리케이션 profiling은 다음 포스트(http://blog.naver.com/bumsukoh/110119532123)를 참고하세요.HPROF를 설정 위해서는 다음과 같이 java 명령어 옵션을 통해 가능합니다.(Java 1.5 이상 일 경우이며 이하 버전은 별도의 옵션이 필요합니다.) 출처: https://judynewyork.tistory.com/42 [forkballpitch]

Springboot - jolokia

jolokia API로 Memory, OS, Threading정보 등을 확인할 수 있다. 가장 자주 확인하는 값은 현재 heap메모리 사용량이다. 대용량 트래픽을 처리하는 경우 수 GB로 애플리 케이션을 실행시키고 heap메모리가 어느 정도 올라가고 GC가 일어나면서 다시 heap이 떨어지는지 확인할 필요가 있다. 이런 API 사용해서 차트로 보여줄 필요가 있다.

http://courspick.blogspot.com/2019/03/springboot-jolokia-jvm.html

Prometheus는 이벤트 모니터링 및 경고에 사용되는 오픈 소스 소프트웨어 응용 프로그램입니다.

Last updated