Skip to content

[πŸ“ˆ μ„±λŠ₯ κ°œμ„ ] G1GC νŠœλ‹μ„ ν†΅ν•œ 응닡 μ‹œκ°„ μ§€μ—° 문제 ν•΄κ²°Β #395

@wlgns12370

Description

@wlgns12370

🎯 ν…ŒμŠ€νŠΈ μ‹œλ‚˜λ¦¬μ˜€ μ •μ˜

κ°€μ •: "λͺ¨μ˜ 수λŠ₯" μ„œλΉ„μŠ€ μž¬μ˜€ν”ˆ μ‹œ, κΈ°μ‘΄ κ°€μž…μž 2,000λͺ…이 λ™μ‹œμ— 'μ‹œν—˜ λͺ©λ‘ 쑰회'λ₯Ό μš”μ²­ν•˜λŠ” 상황

λͺ©ν‘œ: 2,000λͺ…μ˜ λ™μ‹œ 접속에도 μ•ˆμ •μ μΈ 응닡 속도(μ΅œλŒ€ 1초 이내) 확보

  • ν…ŒμŠ€νŠΈ λŒ€μƒ API: GET /api/v1/exams/all
  • 핡심 둜직: λͺ¨μ˜ 수λŠ₯ μ‹œν—˜ 전체 λͺ©λ‘ 쑰회
  • λΆ€ν•˜ ν…ŒμŠ€νŠΈ 도ꡬ: Locust
  • ν…ŒμŠ€νŠΈ ν™˜κ²½: AWS EC2 (사양 TBD), AWS RDS (DB TBD), Spring/Redis on Docker (JVM κΈ°λ³Έ μ„€μ •)
  • λΆ€ν•˜ 쑰건: VUser 2,000λͺ…, Ramp-up 300λͺ…/s

πŸ“Š 1μ°¨ μ„±λŠ₯ μΈ‘μ • κ²°κ³Ό (κ°œμ„  μ „)

G1GC νŠœλ‹ μ˜΅μ…˜μ΄ μ—†λŠ” κΈ°λ³Έ JVM μ„€μ •μœΌλ‘œ λΆ€ν•˜ ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν•œ κ²°κ³Όμž…λ‹ˆλ‹€. (Before)

[Locust ν…ŒμŠ€νŠΈ κ²°κ³Ό (2000λͺ…:300λͺ….html)]

μ§€ν‘œ (Metric) μΈ‘μ • κ°’ (Value) λ‹¨μœ„ (Unit)
VUser (가상 μ‚¬μš©μž 수) 2,000 λͺ…
RPS (Total) 101.20 rps
평균 응닡 μ‹œκ°„ (Avg) 7,741 ms
95%ile 응닡 μ‹œκ°„ (95%ile) 17,000 ms
μ΅œλŒ€ 응닡 μ‹œκ°„ (Max) 19,594 ms
μ—λŸ¬μœ¨ (Error Rate) 0 %

[κ°œμ„  ν›„ JVM λͺ¨λ‹ˆν„°λ§ λŒ€μ‹œλ³΄λ“œ μŠ€ν¬λ¦°μƒ·μ„ 여기에 첨뢀해 μ£Όμ„Έμš”]

[μ£Όμš” 확인 μ§€ν‘œ]: GC Pause Durations κ·Έλž˜ν”„κ°€ 100ms(0.1초) μ΄ν•˜λ‘œ μ•ˆμ •ν™”λ˜μ—ˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.


✨ μ΅œμ’… κ²°λ‘ 

1, 2μ°¨ μΈ‘μ • κ²°κ³Όλ₯Ό λΉ„κ΅ν•˜μ—¬ G1GC νŠœλ‹ 효과λ₯Ό μ •λŸ‰μ μœΌλ‘œ μš”μ•½ν•©λ‹ˆλ‹€.

κ°œμ„  효과 μš”μ•½:

  • GC Pause Time (Max): 200 ms -> [TBD] ms
  • μ΅œλŒ€ 응닡 μ‹œκ°„ (Max): 19,594 ms -> [TBD] ms ( μ•½ O % κ°μ†Œ )
  • 95%ile 응닡 μ‹œκ°„ (95%ile): 17,000 ms -> [TBD] ms ( μ•½ O % κ°μ†Œ )
  • RPS (Total): 101.20 rps -> [TBD] rps ( μ•½ O λ°° 증가 )
  • CPU Usage (Max): ~90 % -> [TBD] %

κ²°λ‘ :

(예: -XX:MaxGCPauseMillis=100 μ˜΅μ…˜ 적용으둜 G1GC의 "Stop-the-World" μ‹œκ°„μ„ 200msμ—μ„œ 100ms μ΄ν•˜λ‘œ μ•ˆμ •ν™”μ‹œμΌ°μŠ΅λ‹ˆλ‹€. κ·Έ κ²°κ³Ό, κ³Όλ„ν•œ GC둜 μΈν•œ CPU μŠ€νŒŒμ΄ν¬κ°€ μ‚¬λΌμ‘ŒμœΌλ©° 95%ile 응닡 μ‹œκ°„μ΄ 17μ΄ˆμ—μ„œ [TBD]초둜 크게 λ‹¨μΆ•λ˜μ–΄...)

μΆ”κ°€ λ…Όμ˜ 사항:

  • (예: G1GC νŠœλ‹μœΌλ‘œ Pause μ‹œκ°„μ€ μ€„μ˜€μœΌλ‚˜, μ—¬μ „νžˆ Allocated/Promoted κ·Έλž˜ν”„κ°€ λ†’κ²Œ λ‚˜νƒ€λ‚¨. μ΄λŠ” λΆˆν•„μš”ν•œ 객체 생성이 λ§Žλ‹€λŠ” μ˜λ―Έμ΄λ―€λ‘œ, 근본적인 해결을 μœ„ν•΄ Redis μΊμ‹œ λ„μž…μ„ 2λ‹¨κ³„λ‘œ κ³ λ €ν•΄μ•Ό 함.)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions