Infrastructuredistributed-systemsreliabilitydatabasesoutages
A Systems Academic Called Marc Brooker's Garbage-Collection Death Spiral a Fantasy. He Animated Real etcd Traces Stuck in It.
AWS engineer Marc Brooker turned traces from a real test environment into animations of metastable failure: Postgres 16 falling out of page cache, etcd write storms, and an etcd read spike that leaves it stuck in garbage collection until someone steps in.

“When I wrote Garbage Collection and Metastability, a widely-known systems academic told me that it was a fantasy,” writes Marc Brooker in his new post. He’d seen it happen in the wild “in ways I couldn’t share,” and he admits the 2024 post leaned on hand waving. “So it’s nice to have a real world example, picking on etcd again.”
The example is a short animation. etcd is “ticking along nicely at 500 reads/second” until the load jumps to 1,000. More reads mean more time in garbage collection, which means less CPU left over for reads, which means requests pile up and stay in memory longer, which means more garbage collection. “This is a self-reinforcing loop, and the system doesn’t recover without intercession,” Brooker writes. Take the extra load away and etcd stays sick until somebody steps in and breaks the loop by hand.
That’s the definition of the thing. The 2021 HotOS paper that named the class, by Nathan Bronson and colleagues, describes metastable failures as ones where “a trigger causes the system to enter a bad state that persists even when the trigger is removed,” as Brooker quoted it in his 2021 write-up. He compared it to the oldest fix in tech: turning things off and on again.
The other three animations come from the same rig. Postgres 16, running in a real MicroVM, handles 20 queries a second easily while its whole working set sits in page cache. After a spike, the running queries (12MB each) have eaten that memory, so everything reads off disk and runs slower. A write spike on etcd makes overloaded peers “look like they’re unavailable, which triggers a storm of application-level resends.” And the one that opens the post asks whether a Raft cluster can lose writes when a single member’s storage “lies about fsync().” It can.
Brooker built the animations with Kiro and KiroCrew, “mostly with Opus 5.5,” and says the results “came from a real test environment, which captures the traces that back the animations.” His post is the whole source for the four traces; it’s short, and it’s mostly video. He thinks a language without garbage collection could fall into the same hole through allocator work, but hasn’t been able to reproduce it yet.
Brooker already has Stability Sim for the abstract version, where retries and queues “make metastability really easy to trigger.” What these animations add is a trace from software you’re probably running. Expect more of this: an LLM can draw the picture in an afternoon now, and the hard part has moved to the test rig that captures something true. The open question is the one Brooker left himself, whether a runtime with no garbage collector at all can be pushed into the same spiral, and what it would take to catch it on video.