프로젝트/APM prototype 개발

[Agent] java.lang.management

블랑v 2024. 4. 3. 22:29

설명

 

java.lang.management 패키지

 

https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/package-summary.html

 

java.lang.management (Java SE 21 & JDK 21)

package java.lang.management Provides the management interfaces for monitoring and management of the Java virtual machine and other components in the Java runtime. It allows both local and remote monitoring and management of the running Java virtual machin

docs.oracle.com

 

이 패키지의 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

플랫폼 로깅을 관리하는 데 사용되며, 로거의 이름과 로깅 레벨 등을 조회하거나 설정할 수 있다.