1. heap memory 확인 필요 케이스
1.1 대용량 엑셀 업로드 수행시
사용자 PC에서 대용량의 업로드 하여 데이터를 DB에 저장하는 프로세스를 수행하는 경우
엑셀 데이터를 컨테이너 heap memory에 로드하면서 OOM 발생 가능성 있음.
이런 케이스는 미들웨어 로그에서 oom를 확인하거나 oom 발생시 생성된 heapdump를 확인하여 원인을 찾아 조치한다.
- 조치방법1 : 파일업로드시 사이즈 체크하여 업로드가 되지 않도록 제한
- 조치방법2 : 파일 load하여 몇건씩 데이터 insert 수행 (권장하지 않음)
1.2 대량의 데이터 쿼리 수행 or 대용량 엑셀 다운로드시
DB 대량의 데이터를 조회하는 경우
DB 대량의 데이터를 조회하고 엑셀로 다운로드 수행시
한번에 많은 heap memory를 사용하기 때문에 메모리가 부족하여 발생함.
- 조치방법1 : 조회조건 제한 (대량의 데이터가 조회되지 않도록 업무적으로 제한)
- 조치방법2 : heap momory 사이즈 증가
1.3 log appender(log4j, slf4j, logback)
하기 같은 경우 log를 정상적으로 남기지 못할때 log관련 오픈소스들은 heap memory에 해당 데이터들을 계속 쌓아두는 경우가 발생함.
- log appender를 사용하여 DB에 저장하려고 하는데 권한이나 접속이 안될경우
- file log appender를 사용하여 file에 write하려고 하는데 권한이 없을경우
- 조치방법1 : 사용하는 appender인지 확인후 해당 원인(DB접속 및 권한 / file write권한)을 제거해 준다.
1.4 db connection close가 정상적으로 되지 않은 경우
최근에는 db connection을 대부부의 f/w에서 관리하기 때문에 이런 케이스는 잘 발생하지 않지만 close가 정상적으로 종료되지 않을경우 memory leak이 발생할 수 있다.
다만 memory leak으로 발생하는 오류보다는 connetion을 가지고 오지 못하는 오류가 먼저 발생할 수 있다.
1.5 http client close가 정상적으로 되지 않은 경우
http client / tcp socket 사용시 close가 정상적으로 되지 않을경우 memory leak이 발생할 수있다.
다만 memory leak으로 발생하는 오류보다는 connetion을 가지고 오지 못하는 오류가 먼저 발생할 수 있다.
2. jmap 명령어 사용법
2.1 JVM 옵션
-- gc관련 옵션
-verbose:gc -XX:+PringGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+DisableExplicitGC -Xloggc:/logs/jeus/gclog/컨테이너명_gc.log |
-- OOM발생시 heapdump생성 옵션
-XX:+HeapDumpOnOutOfMemoryError -XXHeapDumpPath=/logs/jeus/dump |
2.2 프로세스 heapdump 생성방법
jmap -dump:format=b,file=heapdump.hprof 프로세스ID |
2.3 heapdump 생성 쉘
#!/bin/sh export PID="`ps -ef | grep 컨테이너명 | grep -v grep | awk '{print $2 }'`" export THREADDUMP_DIR="/디렉토리/" ex) 디렉토리=/log/threaddump/ echo "PID " $PID echo "Time " $THREADDUMP_DIR count=0 while [ $count -le 2 ] do TODAY_TIMESTAMP=`date +%Y%m%d%H%M%S` TARGET_FILE=$THREADDUMP_DIR$PID"_heapdump."$count"_"$TODAY_TIMESTAMP".hprof" ehco "today. : $TODAY_TIMESTAMP. count : $count" echo "target file : $TARGET_FILE" jmap -dump:format=b,file=$TARGET_FILE $PID sleep 5 ((count++)) done |
3. heapdump 분석툴
heapmemory 분석하는 tool은 여러가지가 있지만 eclipse에서 제공하는 MemoryAnalyzer 툴도 많이 사용한다.
- 사이트 : https://www.eclipse.org/mat/downloads.php
Eclipse Memory Analyzer Open Source Project | The Eclipse Foundation
The Eclipse Foundation - home to a global community, the Eclipse IDE, Jakarta EE and over 415 open source projects, including runtimes, tools and frameworks.
www.eclipse.org
- 사용법 : hprof파일을 로딩하고 leak perspective 모드로 데이터를 보면 이상하게 과점유한 Object를 확인할 수 있다.
'IT > JVM' 카테고리의 다른 글
thread dump 생성 (0) | 2023.02.24 |
---|