A request can grow process memory by hundreds of megabytes while loading only a few thousand database records — and until now there was no way to explain it. The Memory panel on every request now answers that. It tells you whether the growth was transient (objects allocated and immediately reclaimed — RSS held by allocator fragmentation, not a leak) or retained (objects still live at the end of the request — the real leak signal), reports off-heap memory malloc'd outside the Ruby object heap (large strings and parsed response bodies), and breaks down allocations by phase in a single bar — how many objects came from SQL, view rendering, Elasticsearch, and your own application code. When deeper allocation tracking is enabled, a new Allocation sources table points at the exact file:line that created the memory — the gold-standard "this line allocated 300 MB" answer. Requires dead_bro 0.2.25.
Every panel also now explains itself in plain language. New "What this means" call-outs read the numbers for you and turn them into a sentence — "ActiveRecord models were only 1% of allocations; the 414 MB of growth is dominated by transient strings, typically response deserialization, so reducing model loads won't help" — and similar guidance now appears inline next to the data it describes across the whole request page: a slow Elasticsearch query, a partial rendered hundreds of times, a Redis command storm, a sequential scan, or a duplicate query each get an actionable note right where you are looking, instead of buried in one block at the top.