Only in SkySignal

Observer Leak Detection for Meteor

Publication observers that outlive their DDP connection quietly eat memory and MongoDB load. SkySignal is the only Meteor APM that finds them, ranks them and hands you a fix.

The problem

The invisible failure mode every Meteor app hits

Every time a client subscribes, Meteor spins up a server-side observer holding a MongoDB cursor and a mergebox of document state. When the subscription stops, that observer is meant to release. When it does not - because of a caught stop callback, a framework bug, or code that forgot to return from Meteor.publish - the observer becomes a ghost. The DDP client is long gone. The memory and MongoDB work keep growing.

Observer leaks are why Meteor containers restart at 3 AM. They are why memory graphs look like sawteeth. They are why the database gets slower every week. And because generic APM tools only see HTTP and method handlers, they are invisible - until SkySignal.

Nothing fires on leak

A leaked observer has no HTTP request, no method call and no error. There is nothing for a normal APM to sample.

Pub/sub is internal

Meteor multiplexes observers between clients. One leaking pub can look like a healthy one unless you instrument the multiplexer.

Long-lived by design

A 12 hour old observer is normal if the user is still connected. Distinguishing healthy from leaked requires context.

How we detect

7 signals, one confidence score, zero guessing

Instead of a binary "leak or not" flag, SkySignal combines seven independent signals into a single 0 to 100 confidence score. You see exactly why something was flagged and how strong the evidence is.

Lifespan
20 pts
How long the observer has been alive relative to its peer group.
Updates per minute
15 pts
Observers with no activity for hours are more likely leaked.
Document count
10 pts
Large mergeboxes drive the memory cost of each leak.
Collection write freq
15 pts
Hot collections amplify the cost of an abandoned observer.
DDP liveness
15 pts
Per-connection liveness tells us if the client is gone.
Publication context
10 pts
Named publications are suspicious when the pub is no longer routed to.
Growth rate
15 pts
Observers whose doc count climbs forever are a classic leak pattern.
Critical

score >= 80

Act now. Almost certainly a leak.

Warning

score 60 - 79

Strong evidence. Worth investigating.

Info

score 40 - 59

Watch the pattern over time.

Auto-publish false positive suppression

Meteor's auto-publish creates long-lived, low-activity observers on the null publication that look exactly like leaks to a naive detector. SkySignal recognizes the auto-publish pattern and suppresses it, and it gives such observers a 3x longer lifespan tolerance so legitimate development workflows stay quiet.

Grouped by collection and pattern

Ten thousand leaks are usually ten leaks, each happening a thousand times. SkySignal clusters suspected leaks by publication name and observer pattern so you see a handful of root causes rather than a wall of noise.

Astra AI explains and fixes

From 82/100 to an open pull request

When a leak hits critical, Astra reads the publication source, explains in plain English what is keeping the observer alive and generates a patch - usually a missing this.onStop() cleanup or a misplaced setInterval. The patch is opened as a GitHub pull request. Nothing is auto-merged. You review and ship.

fix(pub): stop interval on subscription stop
Meteor.publish('liveOrders', function () {
  const interval = Meteor.setInterval(poll, 5000);

+ this.onStop(() => {
+   Meteor.clearInterval(interval);
+ });

  return Orders.find({ ownerId: this.userId });
});

Opened by Astra - requires review before merge.

Find the leaks no one else can see

Your memory graph will thank you.