JVM이 동작하는 프로세스의 메모리 덤프를 생성하는 방법을 살펴보겠습니다.
먼저, 현재 실행 중인 JVM 프로세스들을 확인합니다.
$ jps -l
여러 프로세스가 있습니다.
다양한 프로세스들이 보이겠지만, 저는 spring-batch 프로젝트에 대한 덤프를 미리 생성해두었습니다.
만약 kafka와 같은 다른 프로세스에 대해 덤프를 생성하고자 한다면 다음 명령어를 사용하면 됩니다:
$ jmap -dump:format=b,file=/path/file.hprof 2501
여기서 format은 binary를 의미하며, 2501은 프로세스 ID입니다. jmap은 JDK에서 제공하는 유용한 도구입니다.
주의사항
- 덤프를 생성하는 도중에는 성능 저하가 발생할 수 있습니다.
- 생성된 덤프 파일의 크기는 JVM이 사용 중인 힙 메모리 크기와 거의 동일합니다. 대규모 프로젝트에서는 디스크 공간을 미리 확보하고 진행하세요.
이제 file.hprof 파일을 가져와서 메모리 분석 도구로 열어볼 차례입니다. VisualVM, Yourkit, Eclipse Memory Analyzer 등 다양한 도구가 있습니다.
저는 Intellij 내장된 VisualVM 플러그인을 사용해서 분석해보겠습니다. 분석 결과, h2 인메모리 DB가 상당한 힙 메모리를 차지하는 것을 확인할 수 있었습니다.
현재 패키지에서 사용하는 메모리를 찾아보겠습니다.
제 프로젝트에서 Settlement 객체가 10,000개 생성되어 약 1.04MB의 메모리를 차지하고 있습니다.
만약 이 객체의 생성을 줄일 수 있다면 메모리 사용량 감소에 도움을 줄 수 있습니다.
감사합니다.
'테스트코드 & 정적분석' 카테고리의 다른 글
OutOfMemoryError 해결하기: IntelliJ로 메모리 누수 분석하는 방법 (0) | 2024.08.15 |
---|---|
TDD로 코드 품질과 효율성 높이는 방법: 장단점과 실전 활용 (0) | 2024.01.04 |