Java

IBM Java GC Option (-Xgcpolicy)

sstdio.h·2018년 1월 30일·조회 3,465

1. 개요

IBM Java(JVM)의 GC 정책 옵션을 정리한 글이다. IBM J9/OpenJ9 계열 JVM에서는 보통 -Xgcpolicy:<정책명> 형식으로 GC 정책을 지정한다.

GC 정책은 애플리케이션의 처리량, 응답 시간, 힙 크기, 실시간성 요구 사항에 따라 선택해야 한다. 아래 내용은 각 정책의 특징을 간단히 비교하기 위한 요약이다.


2. gencon

  • Generational Concurrent의 약자이다.
  • 일반적인 서버 애플리케이션에서 널리 사용하는 세대별 GC 정책이다.
  • 힙을 주로 짧게 살아남는 객체 영역과 오래 살아남는 객체 영역으로 나누어 관리하며, 동시성 작업을 통해 긴 정지 시간을 줄이는 것을 목표로 한다.

3. balanced

  • 64비트 환경에서만 사용할 수 있으며, 4GB 이상의 힙 메모리를 사용할 때 권장된다.
  • 힙을 region이라고 하는 동일한 크기의 영역으로 나누어 사용한다. Region은 수천 개까지 늘어날 수 있다.
  • 전체 힙을 한 번에 처리하기보다 region 단위로 관리해 큰 힙에서의 GC 정지 시간을 완화하는 데 초점을 둔다.

4. metronome

  • 실시간 처리에 유리한 GC 정책이다.
  • GC 스레드의 수는 -Xgcthreads 옵션으로 설정할 수 있다.
  • Alarm 스레드의 수는 변경할 수 없다. 단 1개만 사용한다.
  • 짧고 예측 가능한 pause time이 중요한 환경에서 고려할 수 있다.

5. optavgpause

  • Optimize for average pause time을 의미한다.
  • Concurrent mark와 Concurrent sweep 단계를 사용한다.
  • optthruput보다 pause time이 짧은 편이다. 하지만 그 반대로 처리량은 다소 떨어질 수 있다.

6. subpool

  • 현재는 더 이상 사용되지 않는다. optthruput과 동일하다고 보면 된다.

7. optthruput

  • Optimize for throughput을 의미한다.
  • 애플리케이션 처리량을 우선하는 GC 정책이다.
  • GC가 동작하는 동안 애플리케이션 스레드가 비교적 길게 멈출 수 있으므로, 짧은 응답 시간이 중요한 서비스보다는 배치 작업처럼 처리량이 중요한 환경에 더 적합하다.

8. 확인 방법

실제로 어떤 GC 정책이 적용되었는지는 JVM 시작 옵션과 GC 로그를 함께 확인하는 것이 좋다. 예를 들어 옵션을 명시할 때는 다음과 같은 형식을 사용한다.

-Xgcpolicy:gencon

운영 환경에서는 단순히 정책 이름만 보고 결정하기보다, 동일한 부하 조건에서 GC 로그의 pause time, 전체 처리량, 힙 사용량 변화를 비교해 선택하는 것이 안전하다.

댓글 0

로그인 후 댓글을 남길 수 있습니다.

아직 댓글이 없습니다.