리소스 풀 용량과 동시성 모델
풀은 CPU보다 동시 디스크 작업이 먼저 포화되는 경우가 많습니다. 전역 동시 상한, 리포별 세마포어, fetch → install → build 단계 분리로 나눕니다.
| 지표 | 소규모 풀(1~2대) | 중규모(공유 러너 3~8잡) | 비고 |
|---|---|---|---|
| 동시 무거운 Git fetch/clone | 1~2 | 2~4 | SSD여도 대형 레포는 2병렬 이상부터 iowait 급증 가능 |
| 동시 npm ci / yarn | 1 | 1~2 | node_modules 쓰기 폭발 시 1로 제한 권장 |
| 워크스페이스 정리 주기 | 매 잡 후 | 매 잡 또는 일 배치 | 실패 잔여물이 디스크를 먹음 |
| CI job 전체 타임아웃 | 풀 단계 합의 + 25~40% | 동일 | 스크립트 재시도 상한보다 커야 함 |
셀프호스티드 CI에서는 라벨·큐 깊이로 디스크 집약 잡을 한 풀에 몰지 않게 나눕니다.
Git·npm 풀 대기열과 락
공유 캐시 동시 갱신은 손상·경합을 부릅니다. 워크스페이스는 분리하고, 공유 경로에는 flock 등 락을 겁니다.
flock -w 600 /var/run/mac-ci-git-pull.lock git fetch --all --prune — 대기 최대 600초, 초과 시 실패로 알림.
| 항목 | 권장 초깃값 | 조정 트리거 |
|---|---|---|
Git GIT_LFS_SKIP_SMUDGE + 후속 lfs pull 직렬화 | LFS 대역폭 민감 시 1웨이 | lfs 대기열 길이·실패율 |
npm maxsockets | 5~15 (기본보다 낮게) | RTT 높음·패킷 손실 |
| 큐 대기 타임아웃(락 획득) | 300~900초 | 잡이 자주 “대기만 하다 종료”면 상향 |
| 동일 브랜치 캐시 키 | 커밋 SHA + lockfile 해시 | 캐시 오염 빌드 시 키 엄격화 |
미러·재시도 파라미터는 풀 안정성 FAQ와 조합하세요.
디스크와 캐시 파티션 임계값
APFS 스냅샷·캐시 때문에 df %만으로는 실여유가 과대평가될 수 있어, 사용률 % AND 절대 여유 GB를 함께 씁니다.
| 워터마크 | 디스크 사용률(루트) | 절대 여유(예시) | 자동 동작 예 |
|---|---|---|---|
| 정보 | ≥ 75% | < 40GB | Slack/로그만, 야간 정리 예약 |
| 경고 | ≥ 80% | < 30GB | 오래된 워크스페이스·캐시 LRU 삭제 |
| 큐 제한 | ≥ 85% | < 20GB | 신규 clone/대용량 brew·npm 잡 큐잉 또는 거절 |
| 하드 스톱 | ≥ 90% | < 10GB | 빌드 실패·수동 승인만 허용 |
캐시는 별도 경로로 모아 루트·DD·Docker가 밀어내지 않게 합니다. iOS 혼합 시 DD 매트릭스 임계를 같이 쓰세요.
약한 네트워크 타임아웃과 이어받기 전략
재시도는 지수 백오프+지터가 기본이며, CI job 타임아웃은 스크립트 상한보다 길게 맞춥니다.
| 구분 | 권장 범위 | 비고 |
|---|---|---|
| 스크립트 재시도 초기 대기 | 2~4초 | 지터 ±20% |
| 백오프 배수 | 2 | 최대 대기 상한까지 |
| 최대 대기(한 회) | 60~120초 | 레지스트리·Git 호스트 정책에 맞출 것 |
| 최대 시도 횟수(동일 단계) | 3~5회 | 5회 넘기면 SLA·미러 점검 |
Git http.lowSpeedLimit / lowSpeedTime | 500~2000 B/s, 30~120s | “가짜 살아 있음” 끊기 |
npm fetch-retry-mintimeout / maxtimeout | 10~20s / 60~120s | timeout은 job 여유와 정합 |
검수와 모니터링 지표
대시보드에 올릴 최소 지표:
- iowait% (예: 35%·5분 지속 알림), 디스크 % + 여유 GB (표와 동일)
- 풀 단계 p50/p95, 락 대기 p95, 단계별 재시도율
자주 묻는 질문(FAQ)
Q. SSD인데 병렬 clone이 느림?
A. 메타데이터·인덱스 병목입니다. shallow·sparse·캐시 워밍을 먼저 검토하세요.
Q. 90%에서도 빌드 허용?
A. 여유 GB·스왑을 감시하고 부분 쓰기 리스크를 문서화하세요.
Q. 노드 추가 vs 스펙 업?
A. 동시 풀 병목이면 노드 분리가 유효한 경우가 많습니다. 노드 의사결정 가이드 참고.
맺음말: 요약과 다음 단계
요약: 풀 안정성은 디스크 IO·동시 풀 설계가 핵심입니다. 80/85/90%·여유 GB, 큐·락, 백오프·타임아웃만 정리해도 실패·지연이 줄어듭니다. MacPull 원격 Mac로 전용 노드·플랜을 검토해 보세요.