[스프링] pod 힙 덤프 뜨는 방법과 인텔리제이에서 profiler로 보는 법

프로그래밍/서버2022. 10. 27. 17:24

안녕하세요. 시간이 부족해 간단하게 과정만 글로 남기니 양해 바랍니다.

 

** 주의: 파드 힙 덤프를 뜨면 gc가 발생하는 것으로 알고 있음. 상용환경에서 괜찮을지 확인 필요

 

1. 문제의 파드 접근하기(pod의 이름이 my-pod 이라고 가정)

kubectl exec -it my-pod sh

2. 파드 셀에서 힘 덤프 떠주는 프로그램 설치하기

pod shell 모드로 진입 후 아래의 명령어로 jattach 설치하기(https://github.com/apangin/jattach)

apk add --no-cache jattach --repository http://dl-cdn.alpinelinux.org/alpine/edge/community/

3. 실행 중인 프로세스 확인하기
아래의 명령어로 간단하게 실행 중인 프로세스를 확인하자. ax옵션은 BSD 포멧으로 출력하는 옵션이라고 한다.

ps ax

명령어로 덤프 뜰 pid 확인(1번임)

 

4.힙 덤프 파일 생성
아래의 명령어로 POD에 힙 덤프 파일 생성

jattach 1 dumpheap /tmp/java_pid1-$(date +%Y-%m-%d_%H-%M-%S).hprof

해당 폴더로 가서 생성된 파일을 압축함(안그러면 로컬로 복사할 때 error: unexpected EOF 에러가 발생했음)

gzip java_pid1-2022-10-27_02-25-38.hprof

 

5.덤프 뜬 파일 로컬로 복사하기

pod shell 모드 종료

아래 명령어로 pod 내 힙덤프파일을 로컬로 복사

kubectl cp {namespace}/{pod}:{filepath}/{filename} {localpath}/{localfilename}
kubectl cp my-qa2/my-pod:tmp/java_pid1-2022-10-27_02-25-38.hprof.gz heapdump/java_pid1-2022-10-27_02-25-38.hprof.gz

복사가 성공하면 압축을 해제하자.

gzip -d java_pid1-2022-10-27_02-25-38.hprof.gz

6.분석툴로 힙덤프 분석해보기

인텔리제이에서 View > Tool Windows > Profiler를 클릭한다.

프로파일러 뷰가 열리면 Open snapsho: jfr or hproof file 을 클릭하고  해당 파일을 열면 끝~

작성자

Posted by 드리머즈

관련 글

댓글 영역