Know What's Happening in Production

Understand your Node.js applications with confidence.

Rytena
Production API
R
Heap Memory Timeline
last 4mstreaming
52046340534829010:0110:0210:0310:04GCDeployGCSnapshot
Runtime Event Streamlive
10:02GC FinishedRecovered 18 MB
10:03Snapshot Created487 MB
10:04Deploymentv1.4.8
10:05Memory PressureSessionCache growing
Live Object Allocationheap composition
Strings
42%
Buffers
28%
Objects
18%
Maps
8%
Closures
4%
Memory Flowwhere memory accumulates
Incoming100%
Allocated82%
Survived GC46%
Retained22%
Leaked8%
The Part Logs Never Show

Every memory issue has a reason. Finding it shouldn't take days.

From runtime behavior to retained objects and source code, understand exactly why memory keeps growing.

live
runtime.log

Follow memory from allocation to collection.

See exactly where objects are created, what keeps them alive, and why they never leave memory.

HTTP Request
Active
Rate240/s
Latency18 ms
Express Router
Active
Objects1,204
Memory24 MB
Auth Middleware
Active
Objects618
Memory12 MB
Database Result
Active
Rows4,821
Memory38 MB
Session Store
Active
Objects421
Memory82 MB
User Object
Active
Instances1.2K
Memory34 MB
Cache Layer
Active
Entries8,204
Memory96 MB
Event Listener
Waiting
Objects86
Memory12 MB
Timer Queue
Waiting
Active24
Memory6 MB
GC Cycle
Running
Recovered18 MB
Duration124 ms
Released
Collected
Objects9,832
Freed142 MB
Retained
Leak
Objects12,944
Held182 MB
Root Reference
Source
Filesession.ts:47
Retains12,944
terminal
$
1import { Rytena } from 'rytena-agent'
2 
3Rytena.start({
4 apiKey: process.env.RYTENA_KEY
5})
$

Two minutes from
install to insight.

Drop the agent into your app. Deploy. Watch your memory behavior appear in real time — no config changes, no infrastructure to manage.

works with Express · NestJS · Fastify · any Node.js runtime

Built for the way
production actually breaks.

Anomaly detection that runs on the process, not on a schedule

Rytena samples heap and GC behavior in-process, continuously. When retention patterns deviate from your baseline — a growing buffer, an unbounded array, a listener leak — you get an alert before it turns into an OOM.

Every alert answers the question you would have asked

Instead of a graph and a metric, Rytena resolves the retention path back to the exact allocation site — file, line, and the reference chain keeping the object alive. No guessing, no snapshot diffing, no war room.

Fixes ship with the report, not weeks later

Rytena identifies the pattern responsible — unbounded caches, dangling closures, orphaned timers — and suggests the correction inline. You resolve the underlying cause once instead of patching the same class of leak every quarter.

Compare any two
snapshots. Find
the leak.

Every leak leaves a trail — a new set of objects that survived when they shouldn't have. Rytena diffs snapshots automatically, so you see exactly what grew, what stayed, and what's holding the reference.

4,842 new retained objects·session.ts:47
Comparing snapshots·interval 2m 33s
heap diff
Baseline·10:02:14
#4830469 MB·8,102 obj
Current·10:04:47
#4831487 MB·12,944 obj
ObjectBaselineCurrentDelta
SessionCache
112 MB8,102 entries
182 MB12,944 entries
+70 MB+60%
UserContext
96 MB1,204 instances
96 MB1,204 instances
unchanged
BufferPool
73 MB412 buffers
73 MB412 buffers
unchanged
RedisCache
51 MB2,890 keys
51 MB2,890 keys
unchanged
RequestQueue
18 MB340 pending
19 MB356 pending
+1 MB+5%
Summary
The growth is confined to a single object — SessionCache. Every incoming request appends to sessions[] via push() at session.ts:47, but nothing removes entries once the request completes. The array grows unbounded across the process lifetime.
Retention Path
globalCacheRegistrysessions[]Session
analysis · 94% confidencesource · session.ts:47

Fits every Node.js stack.

One agent. Zero native dependencies. Drops into any Node.js process — regardless of your framework, runtime, or deployment target.

View integrations

Stop chasing leaks
in production.

Install the agent. Deploy. See what was invisible before.

free while in beta · no credit card required