자바 메모리 확인 및 분석

개발새발·2023년 7월 2일
0

java

목록 보기
12/12

지금 회사에서 자바를 사용하고 있는데, 힙메모리 용량이 차면 슬랙으로 알람이 오게 되어있다. 그래서 바로 해결해야함 ㅠㅠ

👩‍🔧 자바 메모리 분석을 위한 툴

관련한 툴들이 많지만 가장 기본적인 툴은 jps, jmap, jhat 이 있다. 이 도구들은 JDK 디렉토리에 포함되어있다.

  • JPS

현재 실행되고 있는 JVM 프로세스를 표시해준다. Jps 명령을 이용해서 분석하고자하는 JVM 프로세스의 PID (process id)를 알아내는 것이 중요하다. 이 PID를 이용해서 jmap 명령을 실행시켜야한다.

$ jps 

나의 경우, 알아내고자 한 프로세스id는 1 이었다.

덧붙여서, jsp 명령의 옵션으로 타겟 시스템(target system)을 지정하면 원격 시스템의 JVM 프로세스의 상태도 확인할 수 있다.

$ jps [options] [hostid]

  • Jmap

Jmap 명령은 현재 실행 중인 JVM 프로세스의 메모리 맵을 보여준다. 자바 힙 메모리(Heap Memory)의 정보를 얻거나 메모리 덤프를 뜸으로써 분석이 가능하다.

PID에 해당하는 JVM 프로세스의 메모리 통계를 알아 볼 수 있다.

jmap -histo:live {PID}

나의 경우 PID 1 로 하여 명령어를 실행했다.

어떤 클래스 인스턴스가 몇 개 만들어져있는지 확인해볼 수 있다. 만약 하나의 클래스가 압도적으로 많이 할당되어 있다면 그 클래스를 만드는 코드에서 메모리 문제를 일으키고 있을 가능성이 크다. 때문에 해당 코드를 확인하여 메모리 문제 원인을 해결해야한다.


  • jhat

Jamp으로 만들어 놓은 힙 메모리 덤프 파일을 분석하기 위한 도구이다.

$ jhat {dump file}
$ jhat out.hprof
Reading from out.hprof...
Dump file created Thu Apr 04 01:03:49 KST 2019
Snapshot read, resolving...
Resolving 4876 objects...
Chasing references, expect 0 dots
Eliminating duplicate references
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

Jhat을 이용해 덤프 파일을 열면 해당 호스트의 7000번 포트를 사용하는 웹서버가 구동되게 된다. 이때, 이미 7000번 포트가 사용중이라면, -port옵션으로 포트를 변경할 수 있다. 덤프 파일이 크면, 웹 서버 구동까지 시간이 오래 걸릴 수 있으니 이점 유의하자.


참고 : https://soft.plusblog.co.kr/51
profile
발새발개

0개의 댓글

관련 채용 정보