부하·장애 주입 테스트 보고서 (2026-10-04)
- 대상 커밋:
f72be63 + 복구 마감 분산 수정(이 보고서와 같은 커밋)
- 환경: 봇 호스트(8코어, 30GB), 서버·부하 생성기 각각 별도 systemd 스코프(서버 MemoryMax 2G), 같은 머신(localhost)
- 도구:
scripts/loadtest.ts — 방마다 오목 선수 2 + 관전자 2 연결, 방마다 2초에 한 수, 지연 = 둔 사람 전송 → 상대 수신
1. 기준 부하 (docs/10-testing.md §4)
| 항목 |
기준 |
결과 |
| 동시 연결 |
2,000 |
2,000 (끝까지 2,000 유지) |
| 진행 중 방 |
500 |
500 |
| 초당 행동 |
250 |
248.2 |
| 지연 p95 |
< 50ms |
20.2ms |
| 지연 p99 |
< 100ms |
37.3ms |
| 서버 CPU |
< 70% (4코어 기준 2.8코어) |
0.2코어 |
| 서버 메모리 |
< 1GB |
141MB |
| 오류·끊김 |
0 |
거절 0, 끊김 0 |
2. 장애 주입: 부하 중 서버 SIGKILL → 재시작
| 항목 |
결과 |
| 재연결 |
2,000/2,000 자동 재연결 |
| 저장된 수 유실 |
0 (모든 방의 수 개수가 줄지 않음) |
| 복구된 방 |
500 (1회차), 1,000 (2회차: 버려진 방 500개 포함), 복구 실패 0 |
| 지연(전체 60초, 재시작 구간 포함) |
1회차 p95 18.8 / p99 37.9ms, 2회차 p95 21.2 / p99 39.6ms |
3. 발견하고 고친 문제
- 첫 장애 주입에서 p99가 336ms로 튀었다. 원인: 재시작 후 복구된 방 1,000여 개의 마감이 모두 "복구 시각 + 30초"로 같아, 30초 뒤 한꺼번에 시간 초과 처리됨(몰림).
- 수정: 복구한 방의 마감을 30초 + 0~30초 무작위로 분산(
Room.restore, docs/04 §3). 재측정 p99 39.6ms.
4. 재현 방법