할당한 메모리가 부족해서 뜨는 현상
1. 서버 기동시 발생한 경우
여기서 Xms, Xmx 값을 늘려주거나 PermSize, MetaspaceSize 등 메모리 분석해서 값을 조절해주면 됨.
또는 JDK 버전을 업그레이도 방안일 수 있으나, 현실적으로 JDK 업그레이드가 쉽지않음.
2. 배치 이후 발생한 경우
주로
1) Memory Leak 현상 : 특정 object 가 메모리 사용 후 GC가 발생하여도 메모리가 반환되지 않고 점유하고 있어 계속해서 사용메모리가 증가하다가 최종적으로 OOM 발생
2) 대량의 데이터 점유로 인해 더이상 Heap 메모리 할당이 불가능하여 OOM 발생
필요 분석자료
1) Heapdump
2) GC 로그
3) ThreadDump 와 WebLogic(WAS) 로그
분석 방법
> 분석기를 이용하여 HeapDump 파일 분석 (IBM Heap Analyzer, Memory Analyzer(Eclipse) 등..)
> 대량의 메모리를 점유하고 있는 Collection Object, Live Object 를 찾아낸다.
그 이후 GC Log 상태 확인, ThreadDump 에서 점유 스레드와 Heapdump 에서 메모리 과점유 객체의 연결성을 찾아본다.
30.485: [GC (Allocation Failure) [PSYoungGen: 245574K->35749K(279552K)] 390824K->181008K(978944K), 0.0287542 secs] [Times: user=0.10 sys=0.00, real=0.02 secs]
55.332: [GC (Allocation Failure) [PSYoungGen: 247717K->32587K(280576K)] 392976K->179058K(979968K), 0.0194387 secs] [Times: user=0.05 sys=0.00, real=0.02 secs]
57.009: [GC (Allocation Failure) [PSYoungGen: 244229K->67789K(256512K)] 390700K->295165K(955904K), 0.0352588 secs] [Times: user=0.12 sys=0.00, real=0.03 secs]
57.066: [GC (Allocation Failure) [PSYoungGen: 255786K->80045K(268800K)] 483162K->482528K(968192K), 0.0485665 secs] [Times: user=0.11 sys=0.06, real=0.05 secs]
57.137: [GC (Allocation Failure) [PSYoungGen: 268428K->80100K(217600K)] 670911K->669962K(916992K), 0.0502808 secs] [Times: user=0.11 sys=0.07, real=0.05 secs]
57.187: [Full GC (Ergonomics) [PSYoungGen: 80100K->0K(217600K)] [ParOldGen: 589861K->596983K(699392K)] 669962K->596983K(916992K), [Metaspace: 160938K->160937K(1193984K)], 0.3665741 secs] [Times: user=0.95 sys=0.01, real=0.37 secs]
57.571: [Full GC (Ergonomics) [PSYoungGen: 137022K->33792K(217600K)] [ParOldGen: 596983K->699323K(699392K)] 734006K->733115K(916992K), [Metaspace: 160942K->160942K(1193984K)], 0.4509592 secs] [Times: user=1.33 sys=0.05, real=0.45 secs]
58.036: [Full GC (Ergonomics) [PSYoungGen: 136268K->135177K(217600K)] [ParOldGen: 699323K->699319K(699392K)] 835592K->834497K(916992K), [Metaspace: 160944K->160944K(1193984K)], 0.2032003 secs] [Times: user=0.46 sys=0.00, real=0.20 secs]
58.239: [Full GC (Ergonomics) [PSYoungGen: 136624K->136202K(217600K)] [ParOldGen: 699319K->699319K(699392K)] 835943K->835521K(916992K), [Metaspace: 160944K->160944K(1193984K)], 0.1818154 secs] [Times: user=0.38 sys=0.00, real=0.19 secs]
58.421: [Full GC (Allocation Failure) [PSYoungGen: 136202K->119818K(217600K)] [ParOldGen: 699319K->698369K(699392K)] 835521K->818187K(916992K), [Metaspace: 160944K->160081K(1193984K)], 0.3909162 secs] [Times: user=1.05 sys=0.01, real=0.39 secs]
58.819: [Full GC (Ergonomics) [PSYoungGen: 137216K->133143K(217600K)] [ParOldGen: 698369K->699389K(699392K)] 835585K->832533K(916992K), [Metaspace: 160085K->160085K(1193984K)], 0.3623401 secs] [Times: user=1.00 sys=0.00, real=0.37 secs]
59.182: [Full GC (Ergonomics) [PSYoungGen: 137026K->135190K(217600K)] [ParOldGen: 699389K->699385K(699392K)] 836415K->834575K(916992K), [Metaspace: 160085K->160085K(1193984K)], 0.2040015 secs] [Times: user=0.48 sys=0.00, real=0.20 secs]
59.387: [Full GC (Ergonomics) [PSYoungGen: 136935K->136214K(217600K)] [ParOldGen: 699385K->699385K(699392K)] 836320K->835599K(916992K), [Metaspace: 160085K->160085K(1193984K)], 0.1769877 secs] [Times: user=0.37 sys=0.00, real=0.18 secs]
59.564: [Full GC (Allocation Failure) [PSYoungGen: 136214K->136209K(217600K)] [ParOldGen: 699385K->699385K(699392K)] 835599K->835594K(916992K), [Metaspace: 160085K->160085K(1193984K)], 0.1742729 secs] [Times: user=0.36 sys=0.00, real=0.17 secs]
Full GC 가 계속 발생하는 GC 로그. 문제가 있는 로그
GC Log 분석방법은 다른 포스팅 참조
https://wsnake0.tistory.com/entry/Java-GC-Log-AnalyzerIBM-GA-%EB%B6%84%EC%84%9D%ED%95%98%EA%B8%B0#
https://wsnake0.tistory.com/entry/Java-GC-Log-%EC%97%90-%EA%B4%80%ED%95%98%EC%97%AC
쓰레드덤프 뜨는법은 아래 참조
분석 결과로는 배포이후 정상적으로 잘 사용하다가 OOM 이 발생한 경우 대개 WAS 문제는 크게없고 Appliaction 문제가 많았음. 하지만 어떤 이유로 발생했는지는 찾아보는게 개발자가 아닌 관리자 입장에서도 좋을듯.
대응방법으로는
-XX:OnOutOfMemoryError=<Argument> 이라는 옵션이 있는데,
이 옵션은 OOM 발생 시 Argument 를 실행한다.
예를들어 -XX:OnOutOfMemoryError= "kill -9 %p" 를 입력하면, OOME 발생시 프로세서를 kill 시킨다.
'IT 공부 > WebLogic 이슈' 카테고리의 다른 글
[Error] WebLogic ResourceLimitException 에러 (0) | 2024.05.12 |
---|---|
Deploy 이후 503 Error 발생 (0) | 2024.05.10 |
웹로직 기동 시 schema validation 오류 (0) | 2024.04.07 |
<BEA-000802> 웹로직 AssertionError (0) | 2024.04.04 |
<BEA-160237> Failed to load class... 웹로직 기동시 발생 (0) | 2024.04.02 |