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