코드에 누수가 있거나 요청량이 많아지면 메모리 사용량 100%가 발생할 수 있습니다.
메모리 사용량이 100%가 되면 더이상 메모리를 할당할 수 없고 이는 서비스 장애로 이어집니다.
Intellij에서는 메모리 사용량을 분석하기 쉽게 만든 툴이 있어 소개해드리겠습니다.
우선. 메모리 분석하기에 앞서 OutofMemory를 만들어보겠습니다.
간단하게 컨트롤러에 반복문을 만들었고,
JVM 옵션으로 -XX:+HeapDumpOnOutOfMemoryError 를 넣었습니다.
위 옵션은 OutOfMemory 발생 시 heap dump를 생성하는 옵션입니다.
(만약 엑츄에이터를 사용한다면 GET 요청을 통해 dump를 받을 수 있습니다.)
(terminal에서는 $ jmap -dump:format=b,file=/path/file.hprof {process_id} 입니다.)
-> 예 : jmap -dump:format=b,file=/path/file.hprof 4425
반복문을 실행하면 OutOfMemory가 발생하고
아래와 같은 파일이 만들어집니다.
파일을 Intellij에서 더블클릭하고 분석을 돌리면
분석한 내용들이 나열되고 가장 큰 객체를 확인해보면, 어떤 컨틀롤러 몇번째 줄에서 발생했는지 나옵니다.
저는 com.logcenter.controller.TrafficController.kt 파일에서 27번째 줄에서 6,200만개의 데이터가 생성되었다고 나오네요.
list에 add를 해주는 곳입니다.
이 방법을 이용해서 누수를 잡거나 코드를 최적화 하실 수 있습니다.
감사합니다.
'테스트코드 & 정적분석' 카테고리의 다른 글
TDD로 코드 품질과 효율성 높이는 방법: 장단점과 실전 활용 (0) | 2024.01.04 |
---|---|
JVM 메모리 덤프 생성 및 분석 (0) | 2023.08.13 |