JMX(Java Management Extensions)는 실행 중인 Java 애플리케이션이나 JVM을 모니터링하고 관리하기 위한 표준 기술이다
쉽게 말하면:
Java 서버 내부 상태를 외부 관리 도구에서 조회하거나 일부 설정을 변경할 수 있게 해주는 관리 인터페이스이다.
JMX로 확인할 수 있는 것
- JVM Heap 메모리 사용량
- Metaspace 사용량
- GC 횟수와 소요 시간
- Thread 개수와 상태
- CPU 사용량
- 클래스 로딩 수
- 데이터베이스 커넥션 풀 상태
- Tomcat 세션 수
- 요청 처리 건수
- 애플리케이션이 직접 노출한 상태값
Oracle의 shared pool은 DB 메모리이고, JMX는 주로 Java 애플리케이션과 JVM 상태를 확인하는 용도
기본 구조
JMX는 주로 MBean이라는 관리 객체를 사용
Java 애플리케이션
└─ MBean Server
├─ Memory MBean
├─ Thread MBean
├─ Garbage Collector MBean
├─ DataSource MBean
└─ 사용자 정의 MBean
외부 도구가 MBean Server에 연결해 값을 조회
대표 도구는 다음과 같다.
- jconsole
- jvisualvm
- JMC, Java Mission Control
- Prometheus JMX Exporter
- 일부 APM 솔루션
실제 예시
Tomcat이나 TomEE 서버에서 JMX를 열어두면 다음과 같은 내용을 볼 수 있다.
Heap Memory: 650MB / 1024MB
Active Threads: 85
DB Active Connections: 18
DB Idle Connections: 12
Loaded Classes: 14,520
Full GC Count: 7
예를 들어 장애가 났을 때 JMX를 보면:
- Heap이 계속 증가하는지
- Full GC가 반복되는지
- Thread가 특정 상태에서 멈춰 있는지
- DB 커넥션 풀이 모두 사용 중인지
- 요청 처리 스레드가 고갈됐는지
등을 확인할 수 있다.
로컬 접속
Java가 실행 중인 서버에서 jconsole을 실행하면 로컬 JVM 프로세스가 보일 수 있습니다.
jconsole
또는 jvisualvm을 사용할 수 있습니다.
jvisualvm
원격 JMX 설정 예시
Java 기동 옵션에 다음과 같이 설정할 수 있다.
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9010
-Dcom.sun.management.jmxremote.rmi.port=9010
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=192.168.0.10
접속 구조는 다음과 같다.
관리자 PC
↓ TCP 9010
Java 서버의 JMX 포트
↓
JVM 내부 MBean 조회
다만 아래 설정은 인증과 암호화를 끄는 것이므로 운영 환경에서는 그대로 사용하면 위험
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
운영에서는 보통 다음 중 하나가 필요
- JMX 인증 설정
- SSL 적용
- 방화벽으로 접근 IP 제한
- 내부망에서만 접근
- SSH 터널 사용
- Prometheus JMX Exporter처럼 직접 원격 JMX를 노출하지 않는 방식
JMX와 APM 차이
| 구분 | JMX | APM |
| 목적 | JVM과 애플리케이션 관리·조회 | 서비스 전체 성능 추적 |
| 확인 범위 | Heap, Thread, GC, 커넥션 풀 | 거래 추적, 응답시간, SQL, 에러 |
| 데이터 저장 | 기본적으로 실시간 조회 | 보통 과거 이력 저장 |
| 설정 | JVM에서 기본 제공 | 별도 Agent 설치가 많음 |
| 예시 | JConsole, VisualVM | Scouter, Pinpoint, Jennifer |
JMX는 원천 데이터를 제공하는 인터페이스이고, APM은 그 데이터를 수집·저장·분석해서 화면으로 보여주는 도구에 가깝다.
'Back-End > Java' 카테고리의 다른 글
| Ant 빌드와 MAVEN 빌드 차이 (0) | 2026.02.25 |
|---|---|
| JKS(Java KeyStore) 파일 과 JKS 의 키체인 (0) | 2026.02.09 |
| JAVA 메타스페이스 (0) | 2025.09.17 |
| 자바 8 / 17 / 21 버전별 차이점 (0) | 2025.06.04 |
| Junit (0) | 2024.12.05 |