JVM의 Xmx 및 Xms를 지정해야 하는 이유에 대해


https://www.digitalocean.com/community/tutorials/java-jvm-memory-model-memory-management-in-java

JVM -Xmx, -Xms 옵션

java -Xms2048m -Xmx2048m -jar app.jar

Xmx 및 Xms는 사용할 최대 및 최소 힙 크기를 지정하는 데 사용됩니다.

  • Xmx
    • Java 프로세스에서 사용할 수 있는 최대 힙 크기를 설정합니다.
    • 설정하지 않으면 시스템의 물리적 메모리 크기가 기본값이 됩니다.
  • Xms
    • Java 프로세스에서 사용할 수 있는 최소 힙 크기를 설정합니다.
    • 미설정시 Xmx와 동일하게 설정

Xmx와 Xms를 지정해야 하는 이유는 무엇입니까?

JVM이 메모리가 부족한 경우 운영 체제에 추가 메모리를 요청하여 힙 크기를 조정합니다.

이때 GC가 발생했고, JVM이 늘어나는 힙의 크기를 재조정하지 않아 결국 Xmx와 같아졌다.

이 조정이 시스템의 물리적 메모리 크기를 초과하면

스왑 공간으로 스왑 인 및 스왑.

https://liltdevs./93

가상 메모리

Chapter 10 Virtual Memory 물리적 메모리와 논리적 메모리를 완전히 분리하여 메모리에 로드되지 않아도 전체 프로세스가 실행되도록 하는 기술입니다.가상 메모리 정의 및 이점 설명

liltdevs.

이때 스왑 영역은 디스크가 되므로 오버헤드가 발생한다.

디스크 읽기 및 쓰기, 즉 스왑 공간,

GC도 동시에 발생하는 경우 엄청난 성능 문제가 발생할 수 있습니다.

또한 Xmx와 Xms가 동일하지 않을 때 문제가 발생할 수 있습니다.

Xms가 너무 작으면 GC를 자주 수행합니다.

이때 추가 메모리를 신청하면 위와 같은 현상이 나타납니다.

따라서 한 시스템에서 여러 서버를 실행하고 있고

애플리케이션이 많은 메모리를 사용할 것으로 예상되는 경우

적절한 Xmx 및 Xms 설정을 지정할 수 있어야 합니다.

로깅을 위한 가상 머신 옵션

  1. 세부정보: gc
    • JVM에서 GC 이벤트가 발생할 때마다 간단한 로그 메시지를 출력합니다.
  2. Xlog:gc
    • 자세한 GC 로그 인쇄
    • 다양한 방식으로 출력 형식 구성
    • -Xlog:gc* GC 로그의 상세 정보 표시
  3. Xlog:gc+힙=디버그
    • GC 관련 메모리 사용량 정보 출력
    • 이 옵션을 사용하면 GC 로그와 함께 힙 정보도 출력됩니다.
  4. XX:+ GCDetails 인쇄
    • GC 이벤트의 세부 정보 인쇄
    • 이 옵션을 사용하면 GC 로그가 상세합니다.
  5. XX:+PrintGCDateStamps
    • GC 이벤트가 발생한 시간 출력
  6. XX:+PrintHeapAtGC
    • GC 이벤트 발생 시 힙 사용량 정보 출력
  7. XX:+PrintTenuringDistribution
    • 활성 및 비공격적 GC의 세부 정보를 인쇄합니다.