IL-0262 GitHub · 2026-08-17networking
Requests through one GitHub datacenter failed or slowed after its load balancer nodes ran out of network flows
A new traffic peak pushed one GitHub datacenter's load balancers towards and then past their limits. A service-mesh sidecar hit its concurrency limit and failed to scale up; GitHub's follow-up is to make autoscaling policies account for the sidecar's concurrency and capacity, not just the host service. As requests backed up, several load-balancer nodes exhausted their network flow limits, which degraded the shared gateway authentication path. Issues, pull requests, the APIs, Actions, Copilot and other services routed through that datacenter began returning errors and slow responses. A latent client retry bug amplified traffic to one internal authentication endpoint, slowing recovery for the Copilot Token Service; GitHub names its retry behavior, together with clients that were not bound enough, as what let the partial degradation grow into a broader overload.
Automated monitoring opened an incident and the affected products were marked degraded on the public status page. Engineers traced the failure to network saturation on the datacenter's load balancers, shifted some traffic to another datacenter and reduced gateway retries. Stopping the load-balancer processes on the saturated nodes and blocking the retry-triggering requests to the most affected internal endpoint brought broad and immediate recovery. Remaining authentication errors from client retry amplification were stabilised by ramping traffic back up gradually, and the incident was resolved after a sustained period of healthy telemetry. No data was lost. The report gives the incident as lasting 7 hours and 35 minutes, with impact for approximately 6 hours 44 minutes.
- Severity
- –
- Scope
- Issues and pull requests (pages and API) and other services routed through the same datacenter's load balancers: REST and GraphQL APIs, Actions, Copilot, sign-in and authentication, webhooks API; impact for approximately 6 hours 44 minutes; no data lost
- Users affected
- about 29K organizations saw at least one failed or slow request; over roughly 4.8M failed or slow requests in total
- Region
- one GitHub datacenter
- Time to detect
- –
- Time to resolve
- 7h 35m
Symptoms
On 17 August 2026 from 13:40 UTC, GitHub issues and pull requests returned errors and slow responses on their pages and in the API. Automated monitoring detected the raised errors, and many other services that route through the same datacenter's load balancers, including the REST and GraphQL APIs, Actions, Copilot, sign-in and authentication, and the webhooks API, also showed errors and latency.
At the peak, 56.07% of front-door requests to the affected services failed or were slow at the edge. Across the window about 29K organizations saw at least one failed or slow request, over roughly 4.8M failed or slow requests in total. Retrying often worked, but during the worst stretches a large share of attempts failed.
The overload started in one datacenter when a new traffic peak pushed its load balancers past their limits. A service-mesh sidecar reached its concurrency limit and did not scale up, requests backed up, and several of the datacenter's load-balancer nodes exhausted their network flow limits. That degraded the shared gateway authentication path, so authentication became slow and failed across the many services behind that datacenter. A latent client retry bug then sharply raised traffic to one internal authentication endpoint and slowed recovery of the Copilot Token Service.
Engineers traced the failure to network saturation on the load balancers of the single datacenter. They began shifting some traffic to another datacenter and reducing gateway retries to relieve the pressure. Broad and immediate recovery came when the load-balancer processes on the saturated nodes were stopped and the requests that triggered retries to the most affected internal endpoint were blocked.
Symptom High error rateHigh latency
Root cause
Root cause Capacity exhaustion
- Trigger
- A new peak in traffic pushed the load balancers of one GitHub datacenter past their limits.
Detection
Automated monitoring detected the elevated errors and an incident was opened; the affected products were marked degraded on the public status page.
Remediation
- Shifted some traffic to another datacenter
- Reduced gateway retries to relieve the pressure on the load balancers
- Stopped the load-balancer processes on the saturated nodes
- Blocked the retry-triggering requests to the most affected internal endpoint
- Ramped traffic back up gradually to stabilise the remaining authentication errors
Action items
- Correct autoscaling policies so they account for service-mesh sidecar concurrency and capacity, not just the host service
- Audit request, concurrency and scaling limits for the service mesh across the affected services
- Review retry and backoff limits across gateways and clients
- Fix the client retry behavior that amplified authentication traffic
- Improve load-balancer capacity monitoring
- Strengthen regional failover safeguards
Lessons
GitHub named the core weakness as the service-mesh sidecar that did not scale up, together with its retry behavior, and clients that were not bound enough to keep a partial degradation from amplifying into a broader overload.
Sources
Related cases
IL-0455Calls from an AWS service through NAT Gateway to an on-premises service returned 5xx errors every busy weekendWoowa Brothers · 2020same root cause · shared On-premises load balancer
IL-0492Hosted Graphite's self-hosted load balancers hit their connection limit in an AWS outage, timing out its site and APIsHosted Graphite · 2018same root cause · shared On-premises load balancer
Check your cluster for this
For AI tools and scripts
- This case as JSON: https://incidentlib-api.benchlet.com/cases/IL-0262
- The cases most like it: https://incidentlib-api.benchlet.com/cases/IL-0262/similar
- MCP server (Streamable HTTP, no key):
https://incidentlib-mcp.benchlet.com/mcp
The API needs no key. The MCP server offers search_incidents, get_incident, list_incidents, get_topic and vocab; both are explained on API and MCP.