Files
joke-app/docs/reports/load-20261004.md
EJClaw aa7f6bffef M2 안정성: 부하·장애 주입 테스트 통과 + 재시작 후 시간 초과 몰림 수정
- 2,000 연결 / 500 방 / 초당 248 행동: p95 20ms, p99 37ms, CPU 0.2코어, 메모리 141MB, 오류 0
- 부하 중 SIGKILL→재시작: 2,000 연결 자동 복구, 수 유실 0
- 복구된 방 마감을 30초 + 0~30초 무작위로 분산(몰림으로 p99 336ms → 40ms)
- 보고서: docs/reports/load-20261004.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 05:15:06 +09:00

1.9 KiB

부하·장애 주입 테스트 보고서 (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. 재현 방법

PORT=4600 DB_PATH=$HOME/.tmp/bg-load/app.db PUBLIC_ORIGIN=http://localhost:4600 LOADTEST_NO_HTTP_LIMITS=1 bun apps/server/src/index.ts &
bun scripts/loadtest.ts --rooms 500 --spectators 2 --seconds 60 --pid <서버 PID>
# 장애 주입: --chaos --restart-cmd "<서버를 다시 띄우는 명령>"