JMX : Java Management Extentions
JVM에서 구동중인 어플리케이션 상태, JVM 시스템 상태를 모니터링하는 Java API
프로메테우스, 마이크로매타 등 다른 메트릭 시스템과 연동해서 통일된 인터페이스로 모니터링 할 수 있음. (확장성)
JMX 구조
Instrumentation Level : MBeans (쓰레드, 힙 등 어플리케이션 상태 정보를 수집)
Agent Level : MBean Server
Connector Level : 어댑터들로 프로토콜에 맞춰서 데이터 변경
Manager Level : 엠빈 서버에 데이터를 요청하는 외부 클라이언트
MBeans
Standard MBean
Dynamic MBean
Model MBean
Open MBean
JMX 모니터링 방법
pid로 모니터링하기
VisualVM, jconsole
JMX Prometheus Exporter
모니터링 대상
Thread
Thread Dump
현재 스레드 상태 기록. 스레드 그룹, 스레드 상태, 실행하고 있는 클래스 파일 등
갑자기 CPU 사용률이 치솟거나 스레드 자원 할당이 안돼서 병목 될때 원인 분석을 위해 모니터링
cpu 자원사용량, 스레드 개수, uptime 등을 확인할 수 있음.
Memory
Heap Dump
현재 heap 메모리 상태 기록. heap 영역별로 사용량이 얼마나 되는지, 클래스별 object 수 등을 볼 수 있음. 메모리 사용량이 예상보다 높거나 OOM으로 죽는 경우 원인 분석을 위해 모니터링
(주로 콜렉션에 데이터를 남겨놨다가 지우지 않아서 쌓이는 경우 발생)
heap usage/size, nonheap usage/size (운영체제 메모리 native memory 빌려쓴거), heap 영역별 usage/size
GC
GC Log
GC는 자바 어플리케이션 성능에 큰 영향을 미친다. GC 로그를 통해서 어떤 이유로 얼마나 수행되었는지 모니터링.
gc thread count, memory usage before/after gc, gc time/duration, gc 단계별
Crash Dump
JVM이 예상치 못한 크래시로 강종될때 상태를 기록. 주로 Native Library를 사용할 때 나타난다. 머신이 강종되는 경우는 JVM이 알 수 없으므로 남지 않는다.
기록이 안된다면 : usage full, 쓰기 권한 문제