[JAVA] JDK 도구를 사용하여 모니터링을 해보자!

sujin·2023년 11월 28일
0

java

목록 보기
2/2

본 내용은, JAVA 전체적인 구조에 대한 이해 중, JDK 도구의 역할과 그 중 모니터링 도구에 대해서 알게된 점을 공유하기 위해 작성하였습니다.

JDK 도구 살펴보러가기

오늘은 JDK에서 제공하는 모니터링 도구들에 대해서 알아보려고한다!.
CPU, Memory, Classes 등에 대한 정보들을 모니터링하면서 메모리 Leak 혹은 GC가 최적화 등에 대한 전략을 잘 세워서 최적화를 해나갈 수 있다고 한다!. 그러기 위해서는 우선 resource를 확인해야하는데, 다양한 방법이 있다!.
termainl에서 단 한줄의 명령어로 아래와 같은 모니터링 툴을 사용할 수 있는데 너무 좋은 것 같다!

최근에 JVM Heap Memory Issue를 운영환경에서 겪으며, Code에서 Memory Leak이 되는 원인이 있는것인지 찾아보기 위해 Jstat와 Visual VM을 다운받아 모니터링하며 메모리 의 여부를 확인한 경험이 있다. 이때, jstat, Visual VM의 큰 도움을 받았는데 아니...JDK 문서를 살펴보는데 다른 것들이 많았다! 위에 있는 도구, application을 다운받아야할까? 아니다! mac에서 terminal을 열어서 jconsole이라고 입력하기만 하면 해당 서비스를 지원한다.

우선 위의 사진은 jconsole을 사용한 것이다.

jconsole

JVM monitoring이 가능하다.

memory와 GC와의 관게를 파악하고 싶다면? Memory 탭을 들어가면 아래와 같이 YGC, OGC time이 나오며 오른쪽 위에서 PerfomGC를 분석할 수도 있습니다.

위의 사진처럼 Memory의 양상을 추적할 수 있고, Chart는 원하는 것을 고를 수 있다.
이때, CodeCache라는 것이 존재하는데 JIT Compiler가 ByteCode를 기계어로 번역하여 저장해놓는 곳이 바로 CodeCache이다. Code Cache의 경우에는 non heap영역에 해당한다. 따라서, GC가 직접적으로 관여하지 않기에 모니터링이 더욱 필요할 것이다!

heap memory usage

  • Eden Space: 새로 생성된 객체가 위치하는 초기 공간입니다. 대부분의 객체는 여기에서 생성되며, 초기에는 Eden Space에서 발생한 가비지 컬렉션을 피할 수 있습니다.

  • Survivor Spaces (S0, S1): Eden Space에서 가비지 컬렉션이 발생하면 살아남은 객체들은 이곳으로 이동합니다. Survivor Spaces는 두 부분(S0와 S1)으로 나뉘어 있으며, 한 곳에서 객체가 쌓이는 동안 다른 곳은 비어 있게 됩니다.

  • Old Generation (Old Space 또는 Tenured Space): 여러 차례의 가비지 컬렉션 후에 살아남은 객체들이 최종적으로 이곳으로 이동합니다. Old Generation은 일반적으로 더 오래 살아남은 객체들이 위치하는 곳입니다.

다음과 같이 VM 에 대한 정보를 파악할 수 있는 페이지도 제공한다.

JPS

jps 명령어를 사용해 실행중인 java process를 볼 수 있다.

아래와 같이 실행중인 프로세스 확인이 가능하고 앞에 있는 숫자는 process id이다.

분석하고 싶은 process id를 확인하는데 사용할 수 있다.

jstat

jstat를 사용하여 terminal에서 JVM 통계 데이터를 모니터링할 수 있다.

다양한 옵션을 제공하는데 그 옵션에 대한 hint를 얻으려면? jstat -help를 입력하면 된다.

그리고 jstat oracle 문서를 통해서 확인이 가능하다.

  • class loader 통계

JVM(Class Loader) 클래스 로더는 JVM 내에서 클래스 파일을 로딩하고 메모리에 적재하는 역할을 하는데 이때 로드된 클래스들에 대한 통계를 확인할 수 있다.

  • compiler 통계

Java HotSpot VM 컴파일러 통계를 확인할 수 있는데 수행된 컴파일 적업이나 실패한 컴파일 작업 수를 확인할 수 있다.

  • gc 통계

현재 생존 공간, eden과 old 영역의 메모리와 YGC, OGC, 전체에 걸쳐 진행되는 FGC 등을 확인할 수 있다.

마무리

이렇게 다양한 모니터링 도구를 제공하고 이슈 트래킹이나 성능 개선을 위해서 문제점을 파악하고 최적화를 해나가는 과정을 대비해, 알아두면 좋을 것 같다!

0개의 댓글