๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
BackEnd๐ŸŒฑ/Java

[JVM ๋งค๊ฐœ๋ณ€์ˆ˜] InitialRAMPercentage, MinRAMPercentage, MaxRAMPercentage

by ์•ˆ์ฃผํ˜• 2023. 10. 1.

๊ฐœ์š”

Java 8๋ถ€ํ„ฐ, InitialRAMPercentage, MinRAMPercentage, ๊ทธ๋ฆฌ๊ณ  MaxRAMPercentage ์„ธ ๊ฐ€์ง€ JVM ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋„์ž…๋˜์–ด ์‚ฌ์šฉ์ž์ž๊ฐ€ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํž™ ํฌ๊ธฐ๋ฅผ ๋” ์œ ์—ฐํ•˜๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ JVM์€ ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜์ง€๋งŒ, ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์ด ๋ฐœ์ „ํ•˜๋ฉด์„œ JVM๋„ ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ฒŒ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

InitialRAMPercentage

-XX:InitialRAMPercentage ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ดˆ๊ธฐ ํž™ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ ์„œ๋ฒ„๋‚˜ ์ปจํ…Œ์ด๋„ˆ์˜ ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ๋ฐฑ๋ถ„์œจ๋กœ ์„ค์ •๋˜๋ฉฐ, double ๊ฐ’์œผ๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 1GB ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ–๋Š” ์„œ๋ฒ„์—์„œ -XX:InitialRAMPercentage=50.0์„ ์„ค์ •ํ•˜๋ฉด, ์ดˆ๊ธฐ ํž™ ํฌ๊ธฐ๋Š” ์•ฝ 500MB(1GB์˜ 50%)๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

$ docker run -m 1GB openjdk:8 java -XX:InitialRAMPercentage=50.0 -XX:+PrintFlagsFinal -version | grep -E "InitialRAMPercentage"
   double InitialRAMPercentage                     := 50.000000                           {product}

๋งŒ์•ฝ -Xms JVM ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ „๋‹ฌ๋˜๋ฉด, -XX:InitialRAMPercentage๋Š” JVM์— ์˜ํ•ด ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.
์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋””ํดํŠธ ๊ฐ’์œผ๋กœ ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ์˜ 1.5625%๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

 

MinRAMPercentage

-XX:MinRAMPercentage ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์ด๋ฆ„๋งŒ ๋ณด๋ฉด ์ตœ์†Œ ํž™ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” MaxRAMPercentage์™€ ๋™์ผํ•˜๊ฒŒ JVM ํž™ ํฌ๊ธฐ์˜ ์ƒํ•œ์„ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • 256MB ๋ฏธ๋งŒ์˜ ๋ฉ”๋ชจ๋ฆฌ์—์„œ๋Š” -XX:MinRAMPercentage๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • 256MB ์ด์ƒ์˜ ๋ฉ”๋ชจ๋ฆฌ์—์„œ๋Š” -XX:MaxRAMPercentage๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
$ docker run -m 100MB openjdk:8 java -XX:MinRAMPercentage=80.0 -XshowSettings:VM -version
VM settings:
    Max. Heap Size (Estimated): 77.38M

JVM์€ ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ ์„œ๋ฒ„/์ปจํ…Œ์ด๋„ˆ์—์„œ ์ตœ๋Œ€ ํž™ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•  ๋•Œ MaxRAMPercentage ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.
์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋””ํดํŠธ ๊ฐ’์œผ๋กœ ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ์˜ 50%๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

 

MaxRAMPercentage

-XX:MaxRAMPercentage๋Š” 256MB ์ด์ƒ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ง„ JVM์˜ ์ตœ๋Œ€ ํž™ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

$ docker run -m 500MB openjdk:8 java -XX:MaxRAMPercentage=60.0 -XshowSettings:VM -version
VM settings:
    Max. Heap Size (Estimated): 290.00M

JVM์€ ํฐ ๋ฉ”๋ชจ๋ฆฌ ์„œ๋ฒ„/์ปจํ…Œ์ด๋„ˆ์—์„œ ์ตœ๋Œ€ ํž™ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•  ๋•Œ MinRAMPercentage ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.
์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋””ํดํŠธ ๊ฐ’์œผ๋กœ ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ์˜ 25%๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

 

 

์‹ค์ œ ๊ฒฐ๊ณผ

์‹ค์ œ๋กœ ์„ค์ • ์—†์ด ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•ด ๋ณด๋ฉด, ๋””ํดํŠธ ๊ฐ’์ด ์ ์šฉ๋˜์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

VM settings ์ˆ˜์น˜ (100MB ์„ค์ •)

  • JDK 8 ~ 17: 48.38M(50% ์ ์šฉ)

VM settings ์ˆ˜์น˜ (256MB ์„ค์ •)

  • JDK 8 ~ 17: 121.81M(50% ์ ์šฉ)

VM settings ์ˆ˜์น˜ (256MB ์„ค์ •)

  • JDK 8 ~ 17 : 121.81M(50% ์ ์šฉ)

VM settings ์ˆ˜์น˜ (500MB ์„ค์ •)

  • JDK 8 ~ 17: 121.81M(25% ์ ์šฉ)

VM settings ์ˆ˜์น˜ (512MB ์„ค์ •)

  • JDK 8 ~ 17 : 123.75M(25% ์ ์šฉ)

VM settings ์ˆ˜์น˜ (1024MB ์„ค์ •)

  • JDK 8 ~ 17: 247.50M(25% ์ ์šฉ)

VM settings ์ˆ˜์น˜ (4GB ์„ค์ •)

  • JDK 8: 910.50M(25% ์ ์šฉ)
  • JDK 11 ~ 17: 1GB(25% ์ ์šฉ)

 

 

์ฃผ์˜์‚ฌํ•ญ

  • ๋งŒ์•ฝ -Xms JVM ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ „๋‹ฌ๋˜๋ฉด, -XX:InitialRAMPercentage๋Š” ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.
  • -Xmx JVM ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ „๋‹ฌ๋˜๋ฉด, MinRAMPercentage์™€ MaxRAMPercentage ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.
  • JVM์€ ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ ์„œ๋ฒ„/์ปจํ…Œ์ด๋„ˆ์—์„œ๋Š” MaxRAMPercentage ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ, ํฐ ๋ฉ”๋ชจ๋ฆฌ ์„œ๋ฒ„/์ปจํ…Œ์ด๋„ˆ์—์„œ๋Š” MinRAMPercentage ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

 

 

์ •๋ฆฌ

OpenJDK(17), ๊ธฐ๋ณธ ์ตœ๋Œ€ ํž™ ํฌ๊ธฐ(๋ฐ”์ดํŠธ) vs ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ(MB)

์š”์•ฝํ•˜๋ฉด, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ดˆ๊ธฐ ํž™ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•˜๋ ค๋ฉด -XX:InitialRAMPercentage๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, -Xms๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ๋‹ค๋ฉด ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.

-XX:MinRAMPercentage์™€ -XX:MaxRAMPercentage๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ตœ๋Œ€ ํž™ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜์ง€๋งŒ, ๋ฌผ๋ฆฌ ์„œ๋ฒ„(๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ) ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๊ฐ€ 256MB ์ด์ƒ์ด๋ผ๋ฉด, -XX:MinRAMPercentage๋ฅผ ์„ค์ •ํ•  ํ•„์š” ์—†์ด, -XX:MaxRAMPercentage๋งŒ ์„ค์ •ํ•ด๋„ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

 

 

์ฐธ๊ณ 

 

๋Œ“๊ธ€