VisualVM으로 Spring 애플리케이션의 CPU와 메모리 사용량 실시간 모니터링하기
Visual VM 으로 Spring Cpu, Memory 사용량 알아보기
최근에 아주 큰 이슈가 터졌다. 너무 충격적이게도 Heap 메모리가 계속 올라가다가 어느순간 OOM 이라는 Error log 와 함께 Q&A 플랫폼이 죽어버리는 아주 큰일이 발생하였다. 아무리 코드만 봐서는 알 수가 없었다..
우선 빠르게 죽지는 않는다! kubernetes 모니터링에 들어가보니 약 2일 정도가 지나면 죽게될것이라고 생각이 들었고 빠르게 Redeploy 를 진행후 프로파일링 툴을 깔았다.
VisualVM 이라고 실시간 spring 의 cpu 사용량, memory 사용량을 알 수 있는 프로파일링 툴이었다 !
우선 Spring 프로젝트를 java -jar 로 실행할때 다음과 같은 option을 넣어주어야 한다. 그럼 이제 8500 port 로 visual vm 이 spring 의 상태에 대한 정보를 얻어 올 수 있게 된다. 나는 아래의 option 을 우선 launch.json 에 추가해 적어 디버깅 환경으로 실행 하였다.
1
2
3
4
5
6
7
8
java \
-Dcom.sun.management.jmxremote.local.only=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.port=8500 \
-Dcom.sun.management.jmxremote.rmi.port=8500 \
-Djava.rmi.server.hostname=12.52.130.xx \
-jar qna.jar
이렇게 설정해주고 실행한다음 visual vm 에서
1
Host > Add JMX Connection
을 해주면 손쉽게 모니터링 할 수가 있다.
하지만 알 수 가 없다…
하지만 알기가 쉽지가 않았다. 우선 OOM 발생하는게 memory 증가가 아주 서서히 일어났고 특이한 log 도 발견 되지 않았다.. 로컬에서 했을때는 사람이 그렇게 많지도 않고 하니 재현이 쉽지가 않았다. 로컬에서 실시간 모니터링 보다는 운영의 실제 Heap Memory 를 Dump 떠서 확인을 해보아야 겠다.
This post is licensed under CC BY 4.0 by the author.