41.4. OpenShift Container Platform에서 OpenJDK 크기 조정
기본 OpenJDK 설정은 컨테이너화된 환경에서 제대로 작동하지 않으며, 따라서 컨테이너에서 OpenJDK를 실행할 때마다 몇 가지 추가 Java 메모리 설정을 항상 제공해야 합니다.
JVM 메모리 레이아웃은 복잡하고 버전에 따라 다르며 자세한 설명은 이 문서의 범위를 벗어납니다. 그러나 최소한 다음 세 가지 메모리 관련 작업은 컨테이너에서 OpenJDK를 실행하기 위한 시작점으로서 중요합니다.
- JVM 최대 힙 크기를 덮어씁니다.
- 적절한 경우 JVM에서 사용하지 않는 메모리를 운영 체제에 제공하도록 유도합니다.
- 컨테이너 내의 모든 JVM 프로세스가 적절하게 구성되었는지 확인합니다.
컨테이너에서 실행하기 위해 JVM 워크로드를 최적으로 튜닝하는 것은 이 문서의 범위를 벗어나며 다양한 JVM 옵션을 추가로 설정하는 작업이 포함될 수 있습니다.
41.4.1. JVM 최대 힙 크기 덮어쓰기
대다수의 Java 워크로드에서 JVM 힙은 메모리를 가장 많이 사용하는 단일 소비 항목입니다. 현재 OpenJDK는 기본적으로 OpenJDK가 컨테이너에서 실행되는지의 여부와 관계없이 컴퓨팅 노드 메모리의 최대 1/4(1/-XX:MaxRAMFraction
)을 힙에 사용할 수 있도록 허용합니다. 따라서 특히 컨테이너 메모리 제한도 설정된 경우 이 동작을 재정의해야 합니다.
위 작업은 두 가지 이상의 방법으로 수행할 수 있습니다.
컨테이너 메모리 제한이 설정되어 있고 JVM에서 실험 옵션을 지원하는 경우
-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap
을 설정합니다.이 명령은
-XX:MaxRAM
을 컨테이너 메모리 제한으로 설정하고 최대 힙 크기(-XX:MaxHeapSize
/-Xmx
)를 1/-XX:MaxRAMFraction
(기본값: 1/4)으로 설정합니다.-XX:MaxRAM
,-XX:MaxHeapSize
또는-Xmx
중 하나를 직접 덮어씁니다.이 옵션을 수행하려면 값을 하드 코딩해야 하지만 안전한 여백을 계산할 수 있다는 장점이 있습니다.