Prefer bounded production diagnostics over ad-hoc console spam that never reaches the process that is failing. Capture event-loop lag, heap used versus limit, and open-handle counts on a fixed interval, and keep a one-shot heap snapshot path gated behind an operator signal so you can compare retained objects between a healthy and a climbing instance. Fail closed when diagnostic channels themselves allocate without a ceiling — observability that grows unbounded becomes the leak you are hunting.
Ops prove-out after wiring the gauges: run a canary with a deliberate retain (unbounded Map or uncleared timer) and confirm heap and lag move before OOM kills the process. Take two snapshots across the climb and verify the retainers show the injected structure, not noise from the diagnostics path. Replay the same load on a clean build after the fix and confirm RSS and open handles return to baseline across a rolling hour so a quieter chart cannot mask a slower climb.