톰캣(java) 아웃오브메모리(java.lang.OutOfMemoryError: GC overhead limit exceeded)
해결 방법
대충 처리하자면 현재 사용중인 메모리중 여유 메모리 어느정도인지 확인해서 더 추가해주기
ㄴ그전에 프로그램상의 메모리 누수는 없는지 확인해야함, 이거는 개발단
ps -ef | grep java 해서 Xmx 설정이 없으면 자바에 디폴트로 설정된 값으로 할당된 상태이니 아래 명령어를 통해 확인 가능
##아래는 java의 디폴트 사이즈 확인하는명령어 보통 heap사이즈는 실제 물리 메모리의 4분의1 이 할당되는듯
[root@localhost]# java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
intx CompilerThreadStackSize = 0 {pd product}
uintx ErgoHeapSizeLimit = 0 {product}
uintx HeapSizePerGCThread = 87241520 {product}
uintx InitialHeapSize := 257949696 {product}
uintx LargePageHeapSizeThreshold = 134217728 {product}
uintx MaxHeapSize := 4116709376 {product}
intx ThreadStackSize = 1024 {pd product}
intx VMThreadStackSize = 1024 {pd product}
####
####현재 java 메모리 어느 영역 사용중인지 찍는 로그
java -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+DisableExplicitGC -Xloggc:/root/test.txt
ㄴ값이 항상 일정한것이.... 뭔가 찾아보면 있을꺼같은데 잘 모르겄다..이건 어디에 쓰이는지 더 확인해봐야함
####
카타리나.sh 에 추가 JAVA_OPTS="$JAVA_OPTS -Xms8192M -Xmx8192M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/root/tomcat_oom_dump.txt"
근데 메모리 늘려줘도 oom 발생하면 덤프파일을 통해 분석을 해보자
카타리나.sh에 추가한 JAVA_OPTS 중 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/root/tomcat_oom_dump.txt" 이부분이 oom 에러 발생할경우 덤프파일 생성하는거
덤프파일 pc로 옮기고 아래에서 분석툴 다운받기
http://www.eclipse.org/downloads/download.php?file=/mat/1.7/rcp/MemoryAnalyzer-1.7.0.20170613-win32.win32.x86_64.zip&mirror_id=1255
오픈 heap 파일 할때 java heap space 에러나면 덤프파일 분석시 사용되는 메모리가 부족해서 발생하는거다.
압축 푼 파일보면 memory analyzer.ini 파일 있는데 거기서 Xmx 값을 2048 혹은 4096으로 늘려준다.
8기가짜리 하는데 8000 주니까 된다. 그럼 pc 메모리가 부족하면 애초에 돌리질 못하냐 ? 아니다. 뭐 하는방법이 있다. 구글링해보면.
'job > was' 카테고리의 다른 글
tomcat ssl 인증서 설치 (0) | 2018.08.31 |
---|