[java] JMX를 사용하여 애플리케이션의 메모리 사용 추적

JMX (Java Management Extensions)는 Java 애플리케이션을 관리하고 모니터링하기 위한 API입니다. JMX를 사용하면 애플리케이션의 다양한 측면을 모니터링할 수 있으며, 이 중에는 메모리 사용량도 포함됩니다. 이 글에서는 JMX를 사용하여 애플리케이션의 메모리 사용량을 추적하는 방법에 대해 알아보겠습니다.

1. JMX 연결 설정

먼저, JMX를 사용하기 위해 애플리케이션에 JMX 연결 설정을 추가해야 합니다. 해당 설정은 JVM 시작 시점에서 JVM 인수로 제공됩니다. 다음은 JMX 연결 설정을 추가하는 명령어의 예입니다.

java -Dcom.sun.management.jmxremote.port=9090 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false MyApp

위 명령어에서는 com.sun.management.jmxremote.port를 통해 JMX 연결에 사용할 포트를 지정하고, com.sun.management.jmxremote.authenticatecom.sun.management.jmxremote.ssl을 사용하지 않도록 설정하고 있습니다. 이렇게 설정하면 인증 및 SSL 암호화가 없는 JMX 연결을 만들 수 있습니다.

2. JConsole 사용하여 JMX 연결 확인

JMX 연결 설정이 완료되면 JConsole을 사용하여 애플리케이션에 JMX 연결 여부를 확인할 수 있습니다. JConsole은 JDK에 포함된 Java 모니터링 및 관리 도구입니다.

JConsole을 실행한 후, “Remote Process”를 선택하고 “Connect” 버튼을 클릭합니다. 그런 다음 JMX 연결에 사용된 포트 번호를 입력하고 “Connect”를 클릭합니다. 정상적으로 연결되었다면 애플리케이션의 JMX MBean을 탐색할 수 있습니다.

3. 메모리 MBean 탐색

JConsole에서 연결된 후, “MBeans” 탭을 선택하고 “java.lang” 패키지를 탐색합니다. 여기에는 JVM의 여러 메모리 MBean이 있습니다.

주요 메모리 MBean에는 java.lang:type=Memoryjava.lang:type=MemoryPool이 있습니다. 전자는 JVM의 전체 메모리 사용량을 제공하고, 후자는 각 메모리 풀의 사용량을 제공합니다.

4. 메모리 사용량 확인

메모리 MBean을 선택하면 메모리 사용량을 확인할 수 있는 속성이 표시됩니다. 예를 들어, HeapMemoryUsage 속성은 힙 메모리의 사용량을 나타내며, NonHeapMemoryUsage 속성은 힙이 아닌 메모리의 사용량을 나타냅니다.

이러한 속성을 사용하여 애플리케이션의 메모리 사용량을 실시간으로 추적할 수 있습니다. 이 정보를 사용하여 메모리 누수를 탐지하거나 애플리케이션의 성능을 최적화할 수 있습니다.

참고 자료