Spring 프로젝트 Docker 이미지 JVM(GC) 설정하기

아이스__아메리·2023년 9월 1일
0

도입기&적용기

목록 보기
4/7
post-custom-banner

개요

잘 몰라서 설정하지 않았었는데 다행인지 이것으로 인한 문제는 발생하지 않았지만 추후에 문제 발생가능성을 고려하여 적용해보았다.
jvm 설정은 Java 애플리케이션의 실행 환경인 서버 성능에 맞는 튜닝이 필요하다.
AWS t4g.small을 기준으로 작성되었다.
설정을 하지않으면 호스트의 시스템 자원에 따라 결정이 된다.

jvmFlags = [
        '-Dspring.profiles.active=prod',
        '-Dfile.encoding=UTF-8',
        '-Xms342m', '-Xmx512m',
        '-XX:MaxMetaspaceSize=256m', '-XX:+CMSClassUnloadingEnabled',
        '-verbose:gc', '-XX:+PrintGCDetails', '-XX:+PrintGCTimeStamps', '-XX:+PrintGCDateStamps'
]

Xms342m

  • 최소 힙 메모리 크기를 나타낸다.
  • 램이 총 2GB이고 보통 1/8에서 1/6로 사용한다.
  • 최대 힙 메모리 크기와 같은 크기로 설정해도 된다.

Xmx512m

  • 최대 힙 메모리 크기를 나타낸다.
  • 램이 총 2GB이고 보통 1/4를 사용한다

XX:MaxMetaspaceSize=256m

  • Metaspace의 최대 크기를 256MB로 설정한다.
  • Metaspace는 클래스 메타데이터를 저장하는 공간으로, 이 값을 조절하여 클래스 로딩 및 언로딩에 대한 메모리 사용을 제어할 수 있다.

XX:+CMSClassUnloadingEnabled

  • CMS (Concurrent Mark-Sweep) GC의 클래스 언로딩을 활성화한다.
  • 이를 통해 불필요한 클래스 메타데이터를 메모리에서 해제할 수 있다.

나머지

  • GC 작업 관련 로깅 활성화

마무리

애플리케이션의 메모리 요구 사항과 서버 리소스에 따라 조절해야한다. 단순히 서버 자원 크기에 따라 설정하는 것이 아니라 한 개의 서버에 컨테이너를 여러개 띄울경우도 고려해야하고 서버 스케일업 또한 고려해야한다.
Static과 GC의 관계 생각하여 메모리를 가득 잡아먹지 않게 조심하여 할당하면 된다.

profile
츠케멘 좋아
post-custom-banner

0개의 댓글