๊ฐ์
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 ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฌด์ํฉ๋๋ค.
์ ๋ฆฌ
์์ฝํ๋ฉด, ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๊ธฐ ํ ํฌ๊ธฐ๋ฅผ ์ค์ ํ๋ ค๋ฉด -XX:InitialRAMPercentage๋ฅผ ์ฌ์ฉํ๋ฉฐ, -Xms๊ฐ ์ค์ ๋์ด ์๋ค๋ฉด ๋ฌด์๋ฉ๋๋ค.
-XX:MinRAMPercentage์ -XX:MaxRAMPercentage๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต๋ ํ ํฌ๊ธฐ๋ฅผ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉ๋์ง๋ง, ๋ฌผ๋ฆฌ ์๋ฒ(๋๋ ์ปจํ ์ด๋) ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๊ฐ 256MB ์ด์์ด๋ผ๋ฉด, -XX:MinRAMPercentage๋ฅผ ์ค์ ํ ํ์ ์์ด, -XX:MaxRAMPercentage๋ง ์ค์ ํด๋ ์ถฉ๋ถํฉ๋๋ค.
์ฐธ๊ณ
- https://youtu.be/IqnAiM1A0d8
- https://learn.microsoft.com/ko-kr/azure/developer/java/containers/overview
- https://dzone.com/articles/difference-between-initialrampercentage-minramperc
- https://www.baeldung.com/java-jvm-parameters-rampercentage
'BackEnd๐ฑ > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] CompletableFuture๋ก ๋น๋๊ธฐ ๋ฐ ๋ณ๋ ฌ ์ฒ๋ฆฌํ๊ธฐ (2) | 2023.12.12 |
---|---|
Java์์ assert์ exception (0) | 2023.08.11 |
์ผ๊ธ ์ปฌ๋ ์ (First-Class Collection)์ด๋? (0) | 2023.04.12 |
Java์ ๊ธฐ๋ณธ ํจ์ํ ์ธํฐํ์ด์ค (0) | 2023.03.20 |
Java์ ์์ธ ์์ฑ ๋น์ฉ์ ๋น์ธ๋ค (0) | 2023.03.10 |
๋๋ฏธํฐ ๋ฒ์น (Law of Demeter)์ด๋? (2) | 2023.02.01 |
๋๊ธ