uuuhhh
์•„์ฃผ์กฐ์ฝ”
uuuhhh
  • ์ „์ฒด (68)
    • Cloud (22)
      • AWS (17)
      • NCP (4)
      • Tech (1)
    • Kubernetes (16)
    • Docker (1)
    • CI๏ผCD (13)
    • Network (4)
    • OS (10)
      • Linux (9)
      • Concepts (1)
    • Language (0)
      • Golang (0)
    • Project (1)
      • Drone (1)
    • ์š”๋ชจ์กฐ๋ชจ (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

  • โš ๏ธ 2022/11/08 - 11/13 ๋ธ”๋กœ๊ทธ ์ด๊ด€ ์ž‘์—… โ‹ฏ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • Jenkins
  • Instance
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • EC2
  • ncp
  • pod
  • network
  • LoadBalancer
  • Iam
  • kubernetes
  • build
  • NKS
  • service
  • argocd
  • docker
  • Linux
  • NodePort
  • minikube
  • AWS
  • CI

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
uuuhhh

์•„์ฃผ์กฐ์ฝ”

์ปจํ…Œ์ด๋„ˆ์—์„œ JVM์€ ์™œ ๋ฉ”๋ชจ๋ฆฌ ๋จน๋Š” ํ•˜๋งˆ์˜€์„๊นŒ?
Kubernetes

์ปจํ…Œ์ด๋„ˆ์—์„œ JVM์€ ์™œ ๋ฉ”๋ชจ๋ฆฌ ๋จน๋Š” ํ•˜๋งˆ์˜€์„๊นŒ?

2022. 11. 10. 20:13

๐Ÿ“ Epilogue


  • ๊ฐ„๋‹จํ•œ JAR ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐ€์ง€๊ณ  ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํŒŒ๋“œ ๋ฐฐํฌ๋ฅผ ์‹œ๋„ํ•˜์˜€๋‹ค !
  • ๊ทธ๋Ÿฐ๋ฐ ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ๊ฐ€.. ์—„์ฒญ๋‚œ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ..
    • OOM Killed.. CrashLoopBackOff ์ƒํƒœ ๋ฐ˜๋ณต..
  • ํŒŒ๋“œ ์ŠคํŽ™ ๋Š˜๋ฆฌ๊ณ  ๋‹ค์‹œ ๋ฐฐํฌํ•˜๋‹ˆ ์ •์ƒ ์ƒํƒœ !
  • ๊ทธ๋ž˜์„œ ์—ฌ๊ธฐ์„œ ์˜๋ฌธ์  โ—๏ธ
    • JVM์€ ์›๋ž˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์žก์•„ ๋จน๋Š”๊ฐ€? → ๊ตฌ์กฐ ๋•Œ๋ฌธ? → ํ•œ ๋ฒˆ ํŒŒํ—ค์ณ๋ณด์ž!

 

โ–ช๏ธŽ JVM์ด๋ž€ ?


๐Ÿ’ก JVM : ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹  (Java Virtual Machine)

 

  • OS์— ์ƒ๊ด€์—†์ด ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ 
  • ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•ด์„œ ์–ป์€ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ OS๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋ฐ”๊ฟ” ์‹คํ–‰

 

 

 

โ–ช๏ธŽ ์ปดํŒŒ์ผ ๊ณผ์ •


๐Ÿ’ก .java → ์†Œ์Šค ์ฝ”๋“œ (Source Code)
     .class → ๋ฐ”์ดํŠธ ์ฝ”๋“œ (Byte Code)
     ๊ธฐ๊ณ„์–ด → ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ (Binary Code)

 

  • Test.java → Javac.exe (Compiler) → Test.class → OS
Javac.exe (Compiler)
• JDK๋ฅผ ์„ค์น˜ํ•˜๋ฉด bin์— ์กด์žฌํ•˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ ์‹คํ–‰ ํŒŒ์ผ

 

  1. Test.java → Javac.exe (Compiler)
    • Java ์†Œ์Šค ์ฝ”๋“œ๋ฅผ Java ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์ปดํŒŒ์ผ๋Ÿฌ ์‹คํ–‰ํ•œ๋‹ค.
  2. Javac.exe (Compiler) → Test.class
    • ์ปดํŒŒ์ผํ•˜์—ฌ .java ํŒŒ์ผ(Source code)์„ .class ํŒŒ์ผ(Byte code)๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
  3. Test.class → OS
    • JVM์ด ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ OS๊ฐ€ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ(๊ธฐ๊ณ„์–ด)๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

 

 

โ–ช๏ธŽ JVM ๊ตฌ์กฐ


  • Class Loader
    • .java ์†Œ์Šค ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•ด์„œ ๋‚˜์˜จ .class ํด๋ž˜์Šค ํŒŒ์ผ์„ ๋ฌถ์–ด
    • OS๋กœ๋ถ€ํ„ฐ ํ• ๋‹น ๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ Runtime Data Area๋กœ ์ ์žฌํ•˜๋Š” ์—ญํ• 
  • Execution Engine
    • Runtime Data Area ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋œ ํด๋ž˜์Šค๋“ค์„ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€๊ฒฝํ•ด ์‹คํ–‰ํ•˜๋Š” ์—ญํ• 
      • Interpreter
        • ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋ช…๋ น์–ด ๋‹จ์œ„๋กœ ํ•˜๋‚˜์”ฉ ์‹คํ–‰
      • JIT (Just-In-Time)
        • ์ ์ ˆํ•œ ์‹œ์ ์— ์ „์ฒด ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ์ปดํŒŒ์ผํ•˜์—ฌ ์‹คํ–‰
  • Garbage Collector (GC)
    • Heap ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋“ค ์ค‘์—์„œ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋“ค์„ ํƒ์ƒ‰ํ•œ ํ›„ ์ œ๊ฑฐํ•˜๋Š” ์—ญํ• 
    • GC๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ GC๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์“ฐ๋ ˆ๋“œ ์™ธ์— ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ผ์‹œ ์ •์ง€ํ•œ๋‹ค.
  • Runtime Data Area
    • ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด OS์—์„œ ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ
      • Method Area
        • ํด๋ž˜์Šค์˜ ์ •๋ณด๋ฅผ ์ฒ˜์Œ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•  ๋•Œ ์ดˆ๊ธฐํ™”๋˜๋Š” ๋Œ€์ƒ์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ณต๊ฐ„
        • e.g.) ํด๋ž˜์Šค ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ์ด๋ฆ„, ํƒ€์ž…, ๋ฆฌํ„ด ํƒ€์ž…, ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ฉ”์†Œ๋“œ ์ด๋ฆ„, ์ •๋ณด ๋“ฑ..
      • Heap Area
        • new๋กœ ์ธํ•ด ์ƒ์„ฑ๋œ ๊ฐ์ฒด์™€ ๋ฐฐ์—ด์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„
        • Method Area์— ์žˆ๋Š” ํด๋ž˜์Šค๋“ค๋กœ๋งŒ ๊ฐ์ฒด ์ƒ์„ฑ ๊ฐ€๋Šฅ
        • GC๊ฐ€ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋“ค์„ ์ œ๊ฑฐํ•˜๋Š” ๊ณต๊ฐ„
      • Stack Area
        • ์‹คํ–‰ ๊ณผ์ •์—์„œ ์ž„์‹œ๋กœ ํ• ๋‹น๋˜์—ˆ๋‹ค๊ฐ€ ๋ฉ”์†Œ๋“œ๋ฅผ ๋น ์ ธ๋‚˜๊ฐ€๋ฉด ๋ฐ”๋กœ ์†Œ๋ฉธ๋˜๋Š” ํŠน์„ฑ์˜ ๋ฐ์ดํ„ฐ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„
        • ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ๊ฐœ๋ณ„์ ์œผ๋กœ ์Šคํƒ ๊ณต๊ฐ„ ์ƒ์„ฑ
        • e.g.) ์ง€์—ญ ๋ณ€์ˆ˜, ๋งค๊ฐœ ๋ณ€์ˆ˜, ๋ฆฌํ„ด ๊ฐ’, ์ž„์‹œ ๋ฐ์ดํ„ฐ, ์Šค๋ ˆ๋“œ ๋“ฑ..
      • PC Register
        • Thread๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ์ƒ์„ฑ๋˜๋Š” ๊ณต๊ฐ„
        • Thread๊ฐ€ ํ˜„์žฌ ์‹คํ–‰๋˜๋Š” ๋ถ€๋ถ„์˜ ์ฃผ์†Œ์™€ ๋ช…๋ น์„ ์ €์žฅ (=Program Counter)
      • Native Method Stack
        • ์ž๋ฐ” ์™ธ ์–ธ์–ด (C, C++ ๋“ฑ..)์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์Šคํƒ ๊ณต๊ฐ„
        • JNI (Java Native Interface)์„ ํ†ตํ•ด ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ์ „ํ™˜ํ•˜์—ฌ ์ €์žฅ
        • ์ปค๋„์ด ์Šคํƒ์„ ์žก์•„์„œ ๋…์ž์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ (=์ผ๋ฐ˜ ํ”„๋กœ๊ทธ๋žจ)

 

์•„๋ฌด๋ž˜๋„ JVM์€ ์–ด๋–ค OS์—์„œ๋„ ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” VM์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ํŠน์„ฑ ๋•Œ๋ฌธ์— ์ž์› ํ• ๋‹น๋Ÿ‰์ด ๋†’๋‹ค๊ณ  ์ƒ๊ฐํ•˜์˜€๋‹ค.

 

  • ๊ทธ๋Ÿฌ๋ฉด ์—ฌ๊ธฐ์„œ ์ƒ๊ฐํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ํ˜„ ์ƒํ™ฉ์˜ ํ•ด๊ฒฐ๋ฒ• ๐Ÿ”จ
  1. JVM ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์ค„์ด๊ธฐ
  2. ์ปจํ…Œ์ด๋„ˆ ์ž์› ๋ฆฌ์†Œ์Šค ํ• ๋‹น ๋Š˜๋ฆฌ๊ธฐ
    • ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด์ง€๋งŒ ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„๊ฐ€ ์ดˆ๋ž˜๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•จ

 

 

โ–ช๏ธŽ JVM ๋ฉ”๋ชจ๋ฆฌ ์ค„์ด๊ธฐ


  • ๊ธฐ๋ณธ์ ์œผ๋กœ JVM์€ Heap ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด์ฆˆ๋ฅผ ๋ฌผ๋ฆฌ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ์˜ 25% ๊ฐ’์„ ํ• ๋‹นํ•œ๋‹ค. ( ≥ JDK 10 )
  • Pod ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์„ฑ
    • JVM - Heap
    • JVM - Non Heap
    • System
    • IDLE
  • Total Memory - Heap Memory - ( Non-Heap Memory + System + IDLE ) = Remain Memory

 

  • System์˜ ๊ธฐ๋ณธ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•œ ํ›„์— Remain Memory ๊ณ„์‚ฐ ๋ฐ ๊ณ ๋ คํ•˜์—ฌ ์ตœ๋Œ€ Heap Memory ์‚ฌ์ด์ฆˆ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

 

  • JAR์„ ์‹คํ–‰์‹œํ‚ฌ ๋•Œ JVM์˜ Heap Area์˜ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ์กฐ์ ˆํ•ด์ฃผ๋Š” ์˜ต์…˜์ด ์žˆ๋‹ค.
  • -Xms256m
    • ๋ฉ”๋ชจ๋ฆฌ์˜ ์ตœ์ดˆ ํฌ๊ธฐ 256MB ์„ค์ •
  • -Xmx512m
    • ๋ฉ”๋ชจ๋ฆฌ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ 512MB ์„ค์ •

 

  • ๊ทธ๋Ÿฌ๋‚˜ K8s Container ํ™˜๊ฒฝ์—์„œ JVM์— ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์กฐ์ •ํ•˜๋Š” -Xms / -Xmx ์˜ต์…˜๋ณด๋‹ค Container ์ž์›์— ๋”ฐ๋ผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋Š” UseContainerSupport ์˜ต์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • K8s Pod ์ƒ์„ฑ ์‹œ Container์˜ ์ž์›์„ ์„ค์ •(requests, limits)ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    • Default = True
    • ≥ OpenJDK 8 ์ง€์›

 

  • -XX:InitialRAMPercentage=40 (%)
    • JVM์˜ ์ดˆ๊ธฐ Heap ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ ์„ค์ •
    • e.g.) ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ 1GB์ธ ๊ฒฝ์šฐ JVM ์ดˆ๊ธฐ Heap ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋Š” 400MB (1GB์˜ 40%)
  • -XX:MinRAMPercentage=50 (%)
    • 200MB ๋ฏธ๋งŒ์˜ ์ดˆ๊ธฐ Heap ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง„ JVM์˜ ์ตœ๋Œ€ Heap ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ ์„ค์ •
  • -XX:MaxRAMPercentage=70 (%)
    • 200MB ์ดˆ๊ณผ์˜ ์ดˆ๊ธฐ Heap ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง„ JVM์˜ ์ตœ๋Œ€ Heap ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ ์„ค์ •

 

 

 

๋ณธ์˜ ์•„๋‹ˆ๊ฒŒ ์ด์Šˆ๊ฐ€ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐ์ด ๋˜์–ด์„œ ์ด์Šˆ๊ฐ€ ์‚ฌ๋ผ์กŒ๋‹คใ… ใ…œ
์ด์Šˆ ์žฌํ˜„์„ ์‹œ๋„ํ•˜์˜€์ง€๋งŒ ์•„์ง๊นŒ์ง€ ์žฌํ˜„์— ์‹คํŒจํ•œ ์ƒํƒœ..
์œผ.. ์ ์šฉํ•ด๋ณด๊ณ  ์‹ถ๋‹ค !!

 

 

 

ref. JVM Structure


JVM ๊ตฌ์กฐ์™€ ์ž๋ฐ” ๋Ÿฐํƒ€์ž„ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ (์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋  ๋•Œ JVM์—์„œ ์ผ์–ด๋‚˜๋Š” ์ผ, ๊ณผ์ •์„ ์„ค๋ช…ํ•ด์ค„ ์ˆ˜ ์žˆ๋‚˜์š”?)

[JAVA] JVM์ด๋ž€? ๊ฐœ๋… ๋ฐ ๊ตฌ์กฐ (JDK, JRE, JIT, ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ...)

 

ref. JVM Memory Setting


์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์—์„œ JVM Memory ์„ค์ •

์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์—์„œ์˜ java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฆฌ์†Œ์Šค์™€ ๋ฉ”๋ชจ๋ฆฌ ์„ค์ •

 

ref. Other Case


JVM + Container ํ™˜๊ฒฝ์—์„œ ์ˆ˜์ƒํ•œ Memory ์‚ฌ์šฉ๋Ÿ‰ ์ฆ๊ฐ€ ํ˜„์ƒ ๋ถ„์„ํ•˜๊ธฐ

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Kubernetes' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Minikube] Pod ์ƒ์„ฑ  (0) 2022.11.12
YAML ๋ฌธ๋ฒ• ์•Œ์•„๋ณด๊ธฐ  (0) 2022.11.11
๋ฆฌ์†Œ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ์™€ CPU ์ž์› ๊ด€๋ฆฌ  (0) 2022.11.10
Pod์˜ ์šฐ์„  ์ˆœ์œ„  (0) 2022.11.10
Pod ์•ˆ์ „ํ•˜๊ฒŒ ์ƒ์„ฑ/๋ฐฐํฌ ๋ฐ QoS ์ •์ฑ… ์„ค์ •  (0) 2022.11.10
    'Kubernetes' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [Minikube] Pod ์ƒ์„ฑ
    • YAML ๋ฌธ๋ฒ• ์•Œ์•„๋ณด๊ธฐ
    • ๋ฆฌ์†Œ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ์™€ CPU ์ž์› ๊ด€๋ฆฌ
    • Pod์˜ ์šฐ์„  ์ˆœ์œ„
    uuuhhh
    uuuhhh
    ํ”ผ๋•€๋ˆˆ๋ฌผ์˜ ์‚ฝ์งˆ๊ธฐ

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”