한 눈에 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
'소프트웨어-이야기 > 프로그래밍 언어와 프레임워크' 카테고리의 다른 글
12월의 추천 서적: 마이크로서비스 아키텍처 구축 가이드 (0) | 2023.12.03 |
---|---|
개발자를 위한 최소한의 DNS 지식 (1): 기초편 (0) | 2023.09.09 |
[ChatGPT] Function calling (0) | 2023.07.25 |
ChatGPT에게 IfNecessary, IfNeeded 함수명의 차이를 물어보다. (0) | 2023.03.04 |
디자인패턴 - Strategy Design Pattern (0) | 2023.02.11 |