π― ν
μ€νΈ μλλ¦¬μ€ μ μ
κ°μ : "λͺ¨μ μλ₯" μλΉμ€ μ¬μ€ν μ, κΈ°μ‘΄ κ°μ
μ 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λ¨κ³λ‘ κ³ λ €ν΄μΌ ν¨.)
π― ν μ€νΈ μλλ¦¬μ€ μ μ
GET /api/v1/exams/allLocustAWS EC2 (μ¬μ TBD), AWS RDS (DB TBD), Spring/Redis on Docker (JVM κΈ°λ³Έ μ€μ )VUser 2,000λͺ,Ramp-up 300λͺ /sπ 1μ°¨ μ±λ₯ μΈ‘μ κ²°κ³Ό (κ°μ μ )
[Locust ν μ€νΈ κ²°κ³Ό (2000λͺ :300λͺ .html)]
[κ°μ ν JVM λͺ¨λν°λ§ λμ보λ μ€ν¬λ¦°μ·μ μ¬κΈ°μ 첨λΆν΄ μ£ΌμΈμ]
[μ£Όμ νμΈ μ§ν]: GC Pause Durations κ·Έλνκ° 100ms(0.1μ΄) μ΄νλ‘ μμ νλμλμ§ νμΈν©λλ€.
β¨ μ΅μ’ κ²°λ‘
κ°μ ν¨κ³Ό μμ½:
200 ms->[TBD] ms19,594 ms->[TBD] ms( μ½ O % κ°μ )17,000 ms->[TBD] ms( μ½ O % κ°μ )101.20 rps->[TBD] rps( μ½ O λ°° μ¦κ° )~90 %->[TBD] %κ²°λ‘ :
(μ: -XX:MaxGCPauseMillis=100 μ΅μ μ μ©μΌλ‘ G1GCμ "Stop-the-World" μκ°μ 200msμμ 100ms μ΄νλ‘ μμ νμμΌ°μ΅λλ€. κ·Έ κ²°κ³Ό, κ³Όλν GCλ‘ μΈν CPU μ€νμ΄ν¬κ° μ¬λΌμ‘μΌλ©° 95%ile μλ΅ μκ°μ΄ 17μ΄μμ [TBD]μ΄λ‘ ν¬κ² λ¨μΆλμ΄...)
μΆκ° λ Όμ μ¬ν:
Allocated/Promotedκ·Έλνκ° λκ² λνλ¨. μ΄λ λΆνμν κ°μ²΄ μμ±μ΄ λ§λ€λ μλ―Έμ΄λ―λ‘, κ·Όλ³Έμ μΈ ν΄κ²°μ μν΄RedisμΊμ λμ μ 2λ¨κ³λ‘ κ³ λ €ν΄μΌ ν¨.)