Memory leak in new release: symptoms, cause, and the test that catches it

Memory grows per request or per screen until processes restart or the app is killed.

Memory leak in new release is documented by 3 accepted public reports from 2 organisations, 2 of them published in the last 5 years.

  • Likelihood: low (2 public reports in 5 years)
  • Impact: medium (2 of 2 reports: availability)

3 public reports · verified 2026-10-21

Symptoms

User-visible

  • A number of pages returned 404 responses that should not have, because authorization checks failed.[1]
  • Git operations, issues, pull requests, API requests and webhooks were degraded at the same time.[1]
  • 3.35% of Git requests returned 500 errors.[2]
  • The 500 errors came from specific file server nodes that had become unresponsive.[2]

Monitoring-visible

  • Pods of the authorization service crashed repeatedly under high load from 6:42 PM UTC.[1]
  • Alerts triggered at 6:44 PM UTC, seven minutes after the change reached production.[1]
  • Memory built up on one file server from August 14 and reset each time the node was redeployed.[2]
  • Goroutine memory grew on the canary file server after the last deploy.[3]
  • The same leak error was also seen on staging.[3]

Root causes

  1. stage: code A performance and resilience optimisation to an authorization microservice contained a memory leak that high traffic exposed.[1]
  2. stage: release-process The canary ring did not send enough traffic to the authorization service to reveal the leak, so the build graduated to production.[1]
  3. stage: code A new adaptive limiter in the Git storage service created a memory leak on file server nodes.[2]
  4. stage: code A change to the Git storage service introduced a goroutine leak, and one merge request was identified as the most likely cause.[3]

Public examples

  1. [1]GitHub, 2023-11-03. A performance and resilience optimisation to GitHub's authorization microservice contained a memory leak exposed under high traffic; pods crashed repeatedly, authorization checks failed and pages returned 404s until the change was rolled back. primary Incident with Git Operations, Issues, Pull Requests, Actions, API Requests, Codespaces, Packages, Pages and Webhooks
  2. [2]GitLab, 2023-08-16. A new adaptive limiter deployed in Gitaly caused memory to build up on a GitLab file server from 14 August 2023 until specific Gitaly nodes became unresponsive and 3.35 percent of Git requests returned 500 errors; the commit was reverted. primary 2023-08-16: Connection errors on gitaly causing 500s (#16187)
  3. [3]GitLab, 2021-09-21. After a deploy to the GitLab canary file server, a Gitaly goroutine leak caused memory to grow; a Gitaly merge request was identified as the likely cause and the server was rolled back to the previous package version. primary 2021-09-21 Gitaly goroutine memory leak on file-cny-01 since last deploy (#5566)

Test classes that catch it

Test classStageLimitationBasis
Canary and progressive delivery checkspost-deployThe canary ring in report [1] did not expose the authorization service to enough traffic to discover the leak, so the build graduated to production at 6:37 PM UTC.cited in [1]
Load and performance testspre-deployA load test shorter than the growth period misses the leak in report [2], where file server memory built up from August 14 until nodes stopped responding.by design analysis
Unit testspre-mergeA goroutine leak check in unit tests covers only the code paths the tests run, so it misses a leak that appears only under high production traffic, as in report.by design analysis

Risk

  • Likelihood: low (2 public reports in 5 years)
  • Impact: medium (2 of 2 reports: availability)
Counts behind the grades
Accepted public reports2
Published in the last 5 years2
Impact stated: availability2

How the grades are computed

Pre-release checklist

  • PR-01
  • PR-02
  • PR-03
  • PR-04
  • PR-05
  • PR-06

First 30 minutes

  • FM-01
  • FM-02
  • FM-03
  • FM-04
  • FM-05
  • FM-06
  • FM-07

Download the checklist

What catches this: catalogue entries

Listed because their own documentation or site names canary and progressive delivery checks, load and performance tests, unit tests on the verification date. Alphabetical. Not a recommendation.

Tools whose documentation names these test classes

Providers whose site names these test classes

Only on this page

In report [1], memory leak in new release took 7 minutes to detect. The authorization service change graduated to production at 6:37 PM UTC. Pods crashed repeatedly under high load from 6:42 PM UTC. Alerts triggered at 6:44 PM UTC. The rollback completed at 7:08 PM UTC, delayed because parts of the deployment infrastructure relied on the authorization service and needed manual intervention.

The 7 minutes in report [1] are short because high traffic exposed the leak within minutes of graduation. In report [2], the leak built up on one file server from August 14 and no time to detect in minutes is published. In report [3], the leak showed on the canary file server, which was drained and rolled back to the previous package version.

Questions

What causes memory leak in new release?

All three accepted reports name a code change: an authorization service optimisation [1], a new adaptive limiter [2] and a goroutine leak [3]. Report [1] adds a release-process cause, a canary ring with too little traffic to reveal the leak.

What are the symptoms of memory leak in new release?

Users see wrong 404 responses [1] or 500 errors on 3.35% of Git requests [2]. Monitoring shows pods crashing repeatedly [1] and memory that builds up and resets on redeploy [2].

Which test class catches memory leak in new release, and what does it miss?

Canary checks carry the cited label from report [1], which states that its canary ring did not get enough traffic to discover the leak. Load tests and unit tests are listed with the by-design label.

Which public reports document memory leak in new release?

Three primary reports are accepted, published between September 2021 and November 2023. One covers an authorization service [1] and two cover file servers of a Git storage service [2] [3].

How long did it take to detect memory leak in new release in the public reports?

Report [1] measures 7 minutes from production graduation at 6:37 PM UTC to alerts at 6:44 PM UTC. The other two reports publish no time to detect in minutes.

Should a team roll back or fix forward when memory leak in new release happens?

All three reports reverted or rolled back the change. Report [2] restarted the server every hour as a workaround until the revert shipped, which FM-05 on this page reflects.

Release Incident Playbook (2026). Memory leak in new release: symptoms, cause, and the test that catches it, content version 1.0.0. https://releasefailures.com/incidents/memory-leak-in-new-release/. Accessed 2026-10-21.