[스프링] 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 을 클릭하고 해당 파일을 열면 끝~
댓글 영역