OutOfMemoeryError 원인 해결 방법
GC overhead limit exceeded
  • Java 프로세스의 98% 이상의 시간을 GC 하는데 사용하고, 2% 이하의 Heap 밖에 회복하지 못하며, 이러한 동작이 5회 이상 반복됨.
  • Heapsize 를 증설함. (Performance 를 항상 고려해야한다)
  • -XX:-UseGCOverheadLimit 옵션을 삭제함.
  • Application의 Memory Leak 을 고침.
java heap space
  • Heap이 가득차거나 공간에 비해 object 가 과도하여 더 이상 Object 를 할당할 수 없음
  • Traffic 증가: Traffic 이 증가하면, Memory 사용량도 증가하여 Memory 가 부족해질 수 있음. 
  • JAVA application 이 Object 를 적절하게 release 하지 못함. object 에 계속 reach 하고 있어서 애플리케이션이 의도하지 않게 객체에 대한 참조를 유지하여 적절하게 GC가 안됨. :
  • JAVA application 이 finalizer를 과도하게 사용함(자바 9부턴 deprecated 되었고, Cleaner를 대안으로 지정). 이는 메모리 누수를 유발하거나 애플리케이션의 성능을 저하시킬 수 있음.
  • Heapsize 를 증설함. (Performance 를 항상 고려해야한다)
  • Application 의 Memory Leak 을 고침.
    : 애플리케이션이 객체에 대한 참조를 유지하면, 가비지 컬렉션(GC)이 해당 객체를 정리하지 못하고 메모리에 계속 남아 메모리 누수로 이어질 수 있다.

Kill process or
sacrifice child
  • VM 자체에 메모리가 모자라서 WAS를 실행할 수 없음. 
  • VM 메모리를 증설하거나 정리함
Metaspace
  • Metasace 영역 부족 (java8 부터 perm → meta 로 변경되고 동작이 달라짐)
  • MetaSpace 영역을 증설함
  • Max 한계를 지정하지 않고, 더 유연하게 JVM을 사용하도록함
  • 전체 VM의 Memory를 증설함 
  • Application Debuging
Permgen space
  • Pergem 영역(클래스의 이름, 필드, 메서드 / 클래스와 관련된 객체 배열 및 타입 배열 /
     Just In Time 컴파일러 최적화) 부족 
  • Pergem 영역을 증설함
  • JVM을 재시작함
  • Application 의 class loader 방식을 디버깅함 
reason stack_trace_with_native_method
  • Native method encountered allocation failure
  • a stack trace is printed in which the top frame is a native method
  • OS 범위에서의 Troubleshooting 이 필요함 
Requested array
size exceeds VM
limit
  • Application 이 heap size 보다 큰 Array 를 메모리에 할당하려고 시도함.
  • Heap size 를 증설함
  • 큰 array 를 할당하려는 application 버그를 고침 
Unable to create
new native thread
  • 새로운 Thread 를 만들기에 Memory 에 충분한 공간이 없음.
  • VM 메모리를 증설하거나 정리함
  • JAVA HeapSize 를 줄임.
  • OS 차원에서 더 많은 Thread 를 실행할 수 있도록 limit 을 증설함 (ulimit -amax user processes)
  • Thread stack size(-Xss) 를 줄임.

'리눅스' 카테고리의 다른 글

WEB 로그 종류  (0) 2024.09.23
JVM 대표 옵션  (0) 2024.09.23
Tomcat 로그 종류  (0) 2024.09.23
Tomcat(WAS) 로그 확인  (0) 2024.09.23
Tomcat 주요 설정 파일 구성  (0) 2024.09.23

+ Recent posts