본문 바로가기
IT Knowledge/Kubernetes

Kubernetes JVM HEAP Size(Settings)

by Seok. 2025. 3. 24.
반응형

JAVA APP에서 Heap Size

 

보통 JAVA Application 실행할때 아래와 같이 Heap Size 설정하는것이 일반적이다.

# Java -Xms 512m -Xmx 1024m app.jar

-Xms : 최소 Heap Size

-Xmx : 최대 Heap Size

 

 

그러나, 컨테이너의 환경이라면, Resource CPU / MEM 필요시마다 변경이 필요하므로,

Xms / Xmx 같이 Heap Size '고정'하는 , 직관적으로 고려하기 어렵다.

(왜냐하면, 컨테이너 관리자 입장에서는 메모리가 부족하다고 해서 메모리를 늘려주었는데,

실제로 사용하는 메모리는 늘어나지 않는가? 하는 이슈를 얻을 있기 때문이다. )

 

따라서, 컨테이너 환경에서 JAVA Application 으로 서비스를 한다면,

컨테이너 환경에 맞도록 JAVA Heap memory 사이즈도 비율적으로 설정하는 편이 맞다. Or 추천한다.

(예를 들어, JAVA Heap Memory Size 컨테이너 resource limit 50% 넘지 않도록 한다 ..)

 

 

비율로 설정하는 방법은 아래와 같은 옵션으로 제공한다.

-XX:MaxRAMPercentage, -XX:MinRAMPercentage

( 옵션은 모두 OpenJDK8 u191 이상에서만 지원된다. )

(추가로, -Xms 같이 JVM 인수가 설정되면 옵션들은 무시 된다. )

 

설명 : -XX:MaxRAMPercentage=50.0 인경우, 컨테이너 Memory limit 1GB일때, HEAP Memory Size 512GB 된다.

만약 컨테이너 환경에서 Heap Memory Size 설정하지 않았다면,

HEAP Memory Size 컨테이너 resource limit Memory 25% Default 값이다.

 

MaxRAMPercentage 예시

 

실제 메모리 사용량 확인

Limit 3G 60% 1.8까지 사용함을 확인.

 

MaxRAMPercentage 값은 얼마로 해야 적정한가?

 : JAVA에서는 Heap 영역외에 non-Heap 영역(ex. GC, Code, …) 있기 때문에,

 : 대략 Heap 영역은 최대 70% 넘지 않기를 권고한다.

 

jAVA_OPTS _JAVA_OPTIONS 차이?

 : JAVA_OPTS Java 실행시, 자체적으로 인식하는 환경변수가 아닙니다. 매개변수로 활용

 : 대신, 많은 스크립트에서 Java App 실행할때 wrapping 해서 사용하는 변수명으로 JAVA_OPTS 많이 사용합니다.

 

 : _JAVA_OPTIONS Java 실행시 매개변수로 사용하는 방법 대신, 환경변수로 적용하는 방안입니다.

(환경변수로 적용하는 방안 : JAVA_TOOL_OPTIONS, _JAVA_OPTIONS 있음)

그러나, _JAVA_OPTIONS 언제 지원중단될지 없는 환경변수입니다.

따라서, 사용하고자 한다면 "JAVA_TOOL_OPTIONS" 사용하는것이 좋습니다.

(밑줄 이름은 비공개로, 표준화하고 싶지 않은 양식이라는것이 향후 뱡향입니다. )

"_JAVA_OPTIONS" 는 Oracle에서 사용하는 방법

"IBM_JAVA_OPTIONS" 는 IBM JVM에서 사용 하는 방법

"JAVA_TOOL_OPTIONS" 는 모든 VM에서 인식됨.

 

 

MaxRAMPercentage 값을 정수? 소수?

 :

 

 

 

컨테이너 JVM Heap Memory 정보 참고

https://community.oracle.com/tech/developers/discussion/4478818/best-practices-java-memory-arguments-for-containers

https://www.baeldung.com/ops/docker-jvm-heap-size

https://www.baeldung.com/java-jvm-parameters-rampercentage

 

JAVA_OPTS vs JAVA_OPTIONS 정보 참고

https://stackoverflow.com/questions/28327620/difference-between-java-options-java-tool-options-and-java-opts

https://bugs.openjdk.org/browse/JDK-4971166

반응형

댓글