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
- 파일을 열고 다음 줄을 추가합니다:
- export CATALINA_OPTS="$CATALINA_OPTS -XX:NativeMemoryTracking=summary"
- 파일을 저장하고 닫은 후 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 애플리케이션의 성능과 메모리 관리를 효과적으로 모니터링할 수 있는 강력한 도구입니다. 이를 통해 개발자는 애플리케이션의 상태를 보다 정확하게 이해하고 최적화할 수 있습니다.
참고자료
'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 |