200===Dev Language/Java

Java Native Memory Tracking(JCMD) 메모리 모니터링 툴

블로글러 2024. 5. 25. 14:01

Oracle Java 7 버전부터 사용 가능한 JCMD 툴의 기능과 사용 방법을 정리했습니다.

JCMD 툴 개요

Oracle Java 7 버전부터 사용 가능한 JCMD 툴은 JVM 애플리케이션의 프로세스 ID, 힙 덤프, 스레드 덤프, VM 시스템 정보, GC 통계 등을 포괄적으로 관리하고 확인할 수 있는 기능을 제공합니다.

프로세스 확인 방법

프로세스 ID 식별:
1. jcmd 명령어를 사용하여 Java 프로세스의 ID를 확인합니다.
2. 자세한 목록은 jcmd -l 명령어로 확인할 수 있습니다.

jcmd
jcmd -l

네이티브 메모리 트래킹(NMT)을 이용한 메모리 누수 감지

네이티브 메모리 트래킹을 활성화하면 JVM에서 네이티브 메모리를 추적하여 메모리 누수를 감지할 수 있습니다.

설정 방법:
1. JVM에 -XX:NativeMemoryTracking=summary 옵션을 추가하여 네이티브 메모리 추적을 활성화합니다. 이는 Tomcat의 CATALINA_OPTS 또는 JAVA_OPTS 환경 변수에 추가하여 적용합니다.
2. 설정 파일 수정:

  • Linux: setenv.sh
  • Windows: setenv.bat
  1. 파일을 열고 다음 줄을 추가합니다:
  2. export CATALINA_OPTS="$CATALINA_OPTS -XX:NativeMemoryTracking=summary"
  3. 파일을 저장하고 닫은 후 Tomcat 서버를 재시작합니다.

베이스라인 설정 및 메모리 변화 모니터링

초기 베이스라인 설정:
개발 및 유지보수 중에 초기 메모리 상태를 설정하고, 이후 변화를 모니터링합니다.

jcmd <pid> VM.native_memory baseline

메모리 변화 모니터링:
메모리 사용의 변화를 확인하기 위해 다음 명령어를 사용합니다:

jcmd <pid> VM.native_memory detail.diff

NMT 보고서 분석

NMT 보고서 주요 항목:
1. 전체 메모리 (Reserved/Committed): JVM이 운영 체제로부터 예약하고 실제 사용하는 메모리 양.
2. Java Heap: Java 객체가 할당되는 주 메모리 영역.
3. 클래스: 클래스 메타데이터에 사용되는 메모리.
4. 스레드: 각 스레드가 사용하는 네이티브 메모리 양.
5. 코드: JVM에 로드된 메소드의 컴파일된 코드에 사용된 메모리.

NMT 보고서는 메모리 사용의 변화를 추적하여 메모리 누수와 같은 문제를 식별하는 데 도움을 줍니다. "+"와 "-" 기호는 이전 스냅샷 대비 메모리 사용량의 증감을 나타냅니다.

요약

JCMD는 Java 애플리케이션의 성능과 메모리 관리를 효과적으로 모니터링할 수 있는 강력한 도구입니다. 이를 통해 개발자는 애플리케이션의 상태를 보다 정확하게 이해하고 최적화할 수 있습니다.

참고자료

 

728x90

'200===Dev Language > Java' 카테고리의 다른 글

자바 8과 자바 18의 주요 차이점  (0) 2024.06.27
JVM Garbage Collection  (0) 2024.06.08
JVM Introduced  (0) 2024.06.08
Convert LinkedHashMap to String with Separator  (0) 2024.06.04
Java CheatSheet  (0) 2024.05.25