본문 바로가기

소프트웨어-이야기/프로그래밍 언어와 프레임워크

개발자를 위한 최소한의 JVM 메모리 트러블 슈팅 사전 지식

한 눈에 JVM 메모리 구조 살펴보기

인텔리제이로 메모리 디버깅하기

(1) 로컬 서버 애플리케이션 상태를 실시간으로 확인하기

Intellij > Profiler > Cpu and Memory Live Charts

로컬에서 현상을 재현했을 때, 메모리 사용량이 증가하고 있는지 확인할 수 있다.

특정 조건에서 가비지 컬렉션이 어떻게 실행되었는지 확인하고 싶을 때에는, GC를 직접 실행할 수 도 있다.

이 버튼을 누르면 된다.

2. Heapdump 파일 분석하기

Shallow Size: 객체를 저장하는 데에 사용된 메모리

Retianed Size: 이 객체를 유지하는 데에 사용된 메모리 크기이다. 객체를 저장하는 데에 사용된 메모리 + 객체가 사용하고 있는 다른 객체를 저장하는 데에 사용된 메모리의 합으로 보면 된다. 이 크기는, GC으로 회수할 수 있는 메모리 크기로 볼 수 있다. 

Heap memory를 트러블 슈팅할 때는, Retained Size를 기준으로 정렬해서 상위에 나오는 Class를 위주로 디버깅을 하면 수월하다. 

Jump to Source 버튼을 사용하면, 해당 함수가 호출된 코드 위치를 확인할 수 있다. 

 

참고 

https://www.jetbrains.com/help/idea/cpu-and-memory-live-charts.html

https://www.jetbrains.com/help/idea/read-the-memory-snapshot.html

https://www.jetbrains.com/help/idea/tutorial-find-a-memory-leak.html#analyze-flow