Skip to main content

Posts

Showing posts with the label Haskell

Hunting Thunks: Using ghc-debug to Fix Haskell Space Leaks in 2025

  Memory leaks in garbage-collected languages are annoying. Memory leaks in Haskell are existential threats. The problem is rarely that you forgot to free memory. The problem is that you told the runtime  not  to calculate it yet. In production, this manifests as the sawtooth pattern of doom: memory usage climbs steadily, the Garbage Collector (GC) works harder and harder to traverse a growing graph of unevaluated computations (thunks), and eventually, the application pauses for seconds at a time before the OOM killer intervenes. Traditional profiling ( -p -hc ) is invasive. It requires recompilation, changes runtime characteristics, and often distorts the very race conditions you are trying to catch. In 2025, the standard for diagnosing these issues in production is  ghc-debug . This tool allows you to snapshot the heap of a running executable, analyze the closure graph, and pinpoint exactly which unevaluated thunk is retaining gigabytes of memory. The Root Cause: T...