1. heap 공간은 컨테이너 메모리에 60~80%를 차지 하도록 설정, 반대로 컨테이너 메모리에 60~80%를 힙사이즈로 주도록 설정
- Metaspace Memory : -XX:MaxMetaspaceSize 로 구성 가능하고,
경험적인 규칙은 메모리 보다 16배 낮은 값으로 제한 하는 것이 좋음. - Java Thread, Garbage Collection, Metaspace, Native Memory, Socket buffers 를 위한 Non heap 공간이 필요
2. request/limit 설정은 필수!, request / limit memory 는 동일하게 설정하는 것이 좋음(QoS Guaranteed)
3. 초기 힙 크기(-XX:InitialRAMFraction, -XX:InitialRAMPercentage, -Xms) 를 최대 힙 크기(-XX: MaxRAMFraction, -XX: MaxRAMPercentage, -Xmx) 와 동일한 크기로 설정
- 힙 크기가 초기 할당 크기보다 커질 때 마다 GC로 인해 JVM 이 일시 중지 되기 때문에,
초기 힙 크기 = 최대 힙 크기 설정 시 Garbage Collection pause time 이 낮아진다.
4. Xmx, Xms로 힙을 고정하거나, MaxRAMPercentage로 컨테이너 메모리의 비율로 주도록 설정, 선택 사항 (주장이 다양함)
Xms, Xms : Container 의 메모리 설정에 따라 조정되는 것보다는 세밀하고 정밀한 값을 설정
MaxRAMPercentage: Pod 확장, 노드 확장 / 기타 요인으로 인해 사용 가능한 메모리가 변동 될 수 있는 동적 환경에서 중요한 역할
5. XX: ActivePrecessorCount 플래그를 설정하여 사용 가능한 코어 수를 명시적으로 설정
Kubernetes CPU 할당량은 프로세스에서 사용할 수 있는 CPU 수가 아니라 프로세스가 CPU에 소비하는 시간과 관련이 있음. JVM과 같은 다중 스레드 런타임은 여러 스레드와 함께 여러 프로세서를 동시에 사용할 수 있다. 컨테이너에 하나의 vCPU 제한이 있더라도 JVM은 두 개 이상의 사용 가능한 프로세서를 확인하도록 지시할 수 있다. Kubernetes CPU 할당량은 프로세스에서 사용할 수 있는 CPU 수가 아니라 프로세스가 CPU에 소비하는 시간과 관련이 있다. JVM과 같은 다중 스레드 런타임은 여러 스레드와 함께 여러 프로세서를 동시에 사용할 수 있다. 컨테이너에 하나의 vCPU 제한이 있더라도 JVM은 두 개 이상의 사용 가능한 프로세서를 확인하도록 지시할 수 있습니다.
Java CPU 수를 limit ~ 2배로 설정한다.
6. Garbage collection
- 일반적인 1GB memory, 2 CPU java 어플리케이션에는 Parallel GC 를 사용해라.
- 힙이 약 2~4GB 인 경우 G1(8< JDK < 16) /Z GC(JDK +17) 로 전환하는 것이 좋다.
- Default Serail GC는 작은 힙/단일 코어에 적당
- https://johngrib.github.io/wiki/java/gc/tuning-guide/
JVM-in-Linux-containers-surviving-the-isolation
컨테이너와 JVM의 메모리 Limit 및 Request
JVM 어플리케이션 용 Kubernetes 의 힙크기, 메모리 사용량 및 리소스 제한
컨테이너 환경에서의 Java 어플리케이션의 리소스와 메모리 설정
Kubernetes 컨테이너 환경에서의 컴퓨팅 리소스 정보 및 제한
K8s 환경에서 더 나은 CPU 및 메모리 활용을 위해 JVM 컨테이너를 조정합니다.
Kubernetes 의 JVM 14 메모리에 대한 실용적인 가이드
'IT' 카테고리의 다른 글
쿠버네티스 아키텍쳐 & 컴포넌트 (3) | 2024.11.06 |
---|---|
쿠버네티스 Operator Pattern (2) | 2024.10.29 |
AWS Opensearch Datastream 및 ISM (3) | 2024.10.26 |
AWS Opensearch(ElasticSearch) Data CSV 변환, S3 적재 (0) | 2024.10.26 |
쿠버네티스[EKS] Kiali 설치 및 기존 Prometheus 활용 (2) | 2024.10.09 |