GC(가비지 컬렉터)

GC

:가비지 컬렉터

  • 메모리 관리 방법 중 하나로 시스템은 더 이상 사용하지 않는 동적으로 할당된 메모리 블록을 찾아 자동으로 사용 가능한 리소스로 복구합니다.
  • Jvm 메모리의 힙 영역에 위치한 GC는 도달할 수 없는 객체를 찾아 제거하여 힙 영역의 메모리를 관리합니다(이 작업을 Mark and Sweep이라고 함).
  • 도달할 수 없는 개체: 스택에서 도달할 수 없는 개체입니다.
  • stop the world: JVM이 GC를 실행하기 위해 애플리케이션 실행을 중지합니다.
  • stop-the-world가 발생하면 GC를 실행하는 스레드를 제외한 모든 스레드가 작동을 멈춥니다.
    중단된 작업은 GC 작업이 완료된 후에야 재개됩니다.
  • 더 이상 사용하지 않는 객체가 GC(Garbage Collection)에 의해 소멸되지 않고 누적되면 메모리 누수가 발생합니다.
    • 메모리 누수가 쌓이면 메모리가 부족하여 OutOfMemoryError 가 발생합니다.
    • 가비지 컬렉터는 메모리 누수인지도 모르고 메모리가 부족하기 때문에 지속적으로 가비지 컬렉션을 트리거하여 메모리를 회수합니다.
    • 결국 너무 빈번한 가비지 수집은 성능 문제를 일으킵니다.
  • 메모리 누수가 의심되는 경우 HeapDump 분석을 통해 의심되는 부분을 잡아내고, 이후 운영 단계에서 scouter와 같은 APM(Application Performance Management)을 활용한 모니터링 체계를 구축하는 것을 권장한다.

+ APM

  • 애플리케이션 성능 관리 서비스
  • 미들웨어(Tomcat, JBoss 등)에서 일어나는 일 거래를 분석하다성능에 영향을 미치는 부품 감지
  • 서비스에 문제가 있거나 서비스가 비효율적으로 운영되는 경우 시간이 너무 오래 걸리고 서버 로그를 뒤져도 문제를 찾기 어렵습니다.
  • 이때 APM을 이용하면 문제를 빠르게 감지할 수 있다.