본문 바로가기

IT

쿠버네티스 환경 JAVA heap 참고 글 정리

728x90

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 in Linux containers, surviving the isolation | BellSoft Java

Running a Java application in Docker on a VM hosted in the cloud is not uncommon these days. But let’s take a closer look at this setup. We have a bare metal box somewhere in the cloud provider’s data center and hypervisor host OS running on that box.

bell-sw.com

 

컨테이너와 JVM의 메모리 Limit 및 Request

 

Memory LIMIT and REQUEST in Containers and JVM

Memory LIMIT and REQUEST in Containers and JVM. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

JVM 어플리케이션 용 Kubernetes 의 힙크기, 메모리 사용량 및 리소스 제한

 

Heap size, memory usage and resource limits in Kubernetes for JVM applications

In Kubernetes, scaling applications vertically, that are primarily designed to scale horizontally (i.e. microservices) could be a challenging task. That's especially true for setting the right resource limits for your pod that is running a JVM application.

akobor.me

 

컨테이너 환경에서의 Java 어플리케이션의 리소스와 메모리 설정

 

컨테이너 환경에서의 java 애플리케이션의 리소스와 메모리 설정

Software Developer, I love code.

findstar.pe.kr

 

Kubernetes 컨테이너 환경에서의 컴퓨팅 리소스 정보 및 제한

 

Kubernetes 컨테이너 환경에서의 컴퓨팅 리소스 정보 및 제한

리소스 할당 (Cpu & Memory) Pod안에서 실행되는 컨테이너가 사용하는 리소스를 제한하지 않으면 Node의 리소스가 무분별하게 사용될 수 있다. 여러 Pod이 존재한다면 Qos 클래스(BestEffort, Burstable, Guarant

effectivesquid.tistory.com

 

K8s 환경에서 더 나은 CPU 및 메모리 활용을 위해 JVM 컨테이너를 조정합니다.

 

Solving Java’s core problems around Memory and CPU

In this article, I will be discussing about JVM Warmup Issues, High Heap Memory Utilisation in our application and what we learned from it

medium.com

 

Kubernetes 의 JVM 14 메모리에 대한 실용적인 가이드

 

The No-Nonsense Guide to JVM 14 Memory on Kubernetes

Back Blog The No-Nonsense Guide to JVM 14 Memory on Kubernetes Sep 22, 2020 This article is born out of frustration I had getting a direct answer to the question of how the modern JVM handles memory on containers. Let's get straight down to brass tacks.The

focused.io

 

 

쿠버네티스에서 쉽게 저지르는 10가지 실수

 

[번역] 쿠버네티스에서 쉽게 저지르는 10가지 실수

쿠버네티스를 사용하면서 쉽게 저지르는 10가지 실수에 대한 번역글입니다. 원글을 읽고 공감가는 부분이 많아 기록으로 남기고자 번역하였습니다.

coffeewhale.com