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.
score >= 80
Act now. Almost certainly a leak.
score 60 - 79
Strong evidence. Worth investigating.
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.
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.