설명
java.lang.management 패키지
이 패키지의 MXBean을 사용하여 힙 메모리 사용량과 관련된 다양한 정보를 조회할 수 있다.
java.lang.management 패키지는 Java 가상 머신(JVM)의 관리 인터페이스를 제공한다.
이 패키지를 통해, 메모리 사용량, 쓰레드 상태, 클래스 로딩 정보, 가비지 컬렉션 등 다양한 시스템 관리 정보를 얻을 수 있다.
주요 기능
주요 관리 인터페이스와 기능을 알아보자.
MemoryMXBean
JVM의 메모리 시스템의 관리 인터페이스이다.
힙 메모리 사용량, 초기 메모리 설정, 사용 중인 메모리, 커밋된 메모리 등을 제공한다.
MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean();
MemoryUsage heapMemoryUsage = memoryMXBean.getHeapMemoryUsage();
System.out.println("Used heap memory: " + heapMemoryUsage.getUsed() + " bytes");
//Used heap memory: 47685176 bytes
ThreadMXBean
JVM 내에서 쓰레드의 관리에 사용된다.
쓰레드의 총 수, 데드락에 빠진 쓰레드의 감지, 쓰레드의 CPU 시간과 사용자 시간을 모니터링할 수 있다.
( 쓰레드 정보와 쓰레드 덤프(thread dump)를 제공)
public static void thread() {
ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
long[] threadIds = threadMXBean.getAllThreadIds();
System.out.println("Active thread count: " + threadIds.length);
System.out.println();
}
GarbageCollectorMXBean
가비지 컬렉션을 관리하는 인터페이스로, 가비지 컬렉터의 이름, 수집된 객체의 총 수, 가비지 컬렉션에 소요된 총 시간 등의 정보를 제공한다.
public static void garbageCollector() {
List<GarbageCollectorMXBean> gcMXBeans = ManagementFactory.getGarbageCollectorMXBeans();
for (GarbageCollectorMXBean gcMXBean : gcMXBeans) {
System.out.println("=== " + gcMXBean.getName() + " === ");
System.out.println("GC count: " + gcMXBean.getCollectionCount() + "\tGC time: " + gcMXBean.getCollectionTime() + " ms");
}
System.out.println();
}
CompilationMXBean
JIT 컴파일러의 컴파일 작업을 관리한다. 컴파일러의 이름과 컴파일에 소요된 총 시간 등을 조회할 수 있다.
public static void jitCompilation() {
CompilationMXBean compilationMXBean = ManagementFactory.getCompilationMXBean();
System.out.println("JIT compiler name: " + compilationMXBean.getName());
System.out.println("Total compilation time: " + compilationMXBean.getTotalCompilationTime() + " ms");
System.out.println();
}
ClassLoadingMXBean
JVM에서 클래스 로딩을 관리한다.
로드된 클래스의 수, 전체 로드된 클래스의 수, 언로드된 클래스의 수 등을 확인할 수 있다.
public static void classLoading() {
ClassLoadingMXBean classLoadingMXBean = ManagementFactory.getClassLoadingMXBean();
System.out.println("Loaded class count: " + classLoadingMXBean.getLoadedClassCount());
System.out.println("Total loaded class count: " + classLoadingMXBean.getTotalLoadedClassCount());
System.out.println("Unloaded class count: " + classLoadingMXBean.getUnloadedClassCount());
System.out.println();
}
OperatingSystemMXBean
운영 체제에 대한 정보와, 시스템의 로드 평균, 프로세스 CPU 시간 등의 시스템 레벨 정보를 제공한다.
public static void operationSystem() {
OperatingSystemMXBean osMXBean = ManagementFactory.getOperatingSystemMXBean();
System.out.println("OS Name: " + osMXBean.getName());
System.out.println("Load Average: " + osMXBean.getSystemLoadAverage());
System.out.println();
}
RuntimeMXBean
JVM의 런타임 시스템에 대한 정보를 제공한다.
JVM의 이름, 버전, 클래스 패스, 라이브러리 패스, JVM이 시작된 시간 등이 포함된다.
public static void runtime() {
RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
System.out.println("JVM name: " + runtimeMXBean.getVmName());
System.out.println("JVM uptime: " + runtimeMXBean.getUptime() + " ms");
System.out.println();
}
PlatformLoggingMXBean
플랫폼 로깅을 관리하는 데 사용되며, 로거의 이름과 로깅 레벨 등을 조회하거나 설정할 수 있다.
'프로젝트 > APM MiddleWare' 카테고리의 다른 글
[Agent / ASM] agent의 transform 메서드에 ASM 바이트코드 적용하기 2 / ASM 라이브러리 이슈 (0) | 2024.04.04 |
---|---|
개발 진행 : 메서드 변조(MethodVisitor, ClassVisitor), 로깅 (0) | 2024.04.03 |
[Agent] Agent 동작 구성 및 이해 (0) | 2024.04.03 |
[A Java bytecode engineering library]chap02 실습파일 (0) | 2024.04.02 |
[HikariCP][ASM] JDBC 쿼리 로깅하기(ProxyConnection) (2) | 2024.03.05 |