GitHub Actions Concurrency Under Load: Measuring Queue Saturation and Runner Exhaustion at 500 RPS
Описание и применение
Применение строгих ограничений параллелизма, закрепленных SHA‑тегов действий и улучшенной стратегии кэширования сократило время ожидания в очереди более чем на 90 %, снизило потребление раннеров и повысило процент успешных запусков с 67 % до 99 %.
Задача
Validate that GitHub Actions workflows can handle concurrent webhook triggers from multiple branches and deployment hooks without exhausting runner quota or incurring long queue times.
Результат
Applying concurrency controls, pinned action SHAs, and composite cache keys reduced queue times by >90%, lowered runner consumption, and improved success rates from 67% to 99%.
Рабочий процесс
- 1. Construct synthetic load with k6 to send 500 RPS to deployment webhook.
- 2. Trigger GitHub Actions via repository_dispatch events with unique branch references.
- 3. Measure queue times, runner usage, and success rates for unbounded, concurrency.group+cancel-in-progress, and pinned-action configurations.
- 4. Revise cache strategy to composite keys with restore-keys fallback.
- 5. Implement pre-merge validation script to enforce SHA pinning and concurrency groups.
Доказательства
The unbounded configuration saturated our runner quota in under two hours.
Pinning action SHAs eliminated a secondary bottleneck: GitHub's action resolution layer was making repeated API calls to resolve @v3 tags under load, adding 2-4 seconds per workflow initialization.
Revised cache strategy improved hit rate to 78% under load, cutting average job duration from 4m 12s to 2m 47s.
- Дата записи: 2026-10-21T10:41:27.662Z