728x90
반응형

🧭 1. VisualVM 소개

VisualVM은 JDK에 포함된 jvisualvm 또는 독립 실행형 형태로 제공되는 JVM 모니터링 및 분석 도구입니다.
다음과 같은 기능을 제공합니다.

🔹 주요 기능

기능설명
CPU / 메모리 모니터링 힙(Heap) / PermGen(Metaspace) 사용량, GC(Garbage Collection) 횟수 확인
스레드 상태 추적 실행 중 스레드, 데드락, Runnable/Waiting 상태 추적
프로파일링(Profiling) CPU, 메서드 호출 빈도, 메모리 할당 추적
Heap Dump 분석 힙 덤프를 시각적으로 분석하여 메모리 누수 탐지
원격 모니터링(Remote Monitoring) 원격 서버의 톰캣 프로세스 모니터링 가능 (JMX 또는 jstatd 사용)

⚙️ 2. Tomcat 연동 방법

(1) 로컬 톰캣

  • 같은 PC에서 톰캣 실행 시 자동으로 VisualVM이 JVM 프로세스를 탐지합니다.
  • 그냥 jvisualvm 실행 → “Local” 탭에서 org.apache.catalina.startup.Bootstrap 프로세스 선택하면 됩니다.

(2) 원격 톰캣

  1. 톰캣 실행 옵션에 JMX 포트 설정
  2.  
    CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
  3. 톰캣 재시작 후 VisualVM에서 원격 호스트 추가
    • VisualVM → Add Remote Host
    • “JMX Connection”으로 hostname:9090 입력
  4. 원격 연결 시 방화벽 9090 포트 허용 필요합니다.

⚠️ 3. 운영 시 주의점

구분주의사항설명
성능 부하 ⚠️ 실시간 프로파일링(Profiling) 시 CPU 점유율 상승 운영 서버에서는 “모니터링”만, 프로파일링은 테스트 환경에서만 수행
보안 ⚠️ JMX 인증 미설정 시 누구나 접근 가능 운영 환경에서는 jmxremote.access / jmxremote.password 파일로 인증 필수
메모리 사용량 증가 VisualVM 연결 시 JVM의 Metaspace와 Heap 사용량 소폭 증가 일시적인 영향이므로 큰 문제는 없으나, 여유 메모리 확보 권장
방화벽 설정 ⚠️ JMX 포트 외부 노출 금지 내부망에서만 접근하거나 SSH 터널링을 사용
Heap Dump 크기 대형 서비스는 Heap Dump 시 수백 MB~수 GB 발생 가능 운영 중에는 Heap Dump 남발 금지 — 스냅샷은 트래픽 저하 유발 가능

🧩 4. 권장 운영 방식

목적방법
개발·테스트 환경 VisualVM을 이용해 GC 튜닝, 스레드 분석, 메모리 누수 점검
운영 환경 기본 JMX 연결만 유지하고, 필요할 때만 접속
장기 모니터링 VisualVM 대신 Prometheus + Grafana 또는 JMX Exporter를 통해 안정적 시각화 추천

💡 팁

  • 플러그인 설치로 기능 확장 가능 (Visual GC, Thread Inspector 등)
  • JDK 버전별 호환성 주의 — JDK 17 이상에서는 최신 VisualVM (2.x 이상) 사용
  • SSH 터널링을 이용하면 JMX 포트를 외부로 열지 않고도 원격 모니터링 가능:
  •  
    ssh -L 9090:localhost:9090 user@your-server

📈 5. VisualVM 실무 팁

  • Visual GC 플러그인 설치 → GC 동작 시각화
    → Tools > Plugins > Available Plugins > Visual GC
  • Heap Dump는 꼭 트래픽 낮은 시간에 수행
  • 자동 모니터링은 VisualVM 대신 Prometheus + JMX Exporter 연동 추천

728x90
반응형

+ Recent posts