Course contentsShow
← Node.js
Lesson 1677 of 1,98015. Logging, Observability, and MetricsFree lesson

Capturing Process State on Crash

Automate the collection of environment variables and memory snapshots during critical system failures.

In this lesson, you will learn how to automate the collection of vital environment metadata and memory dumps the moment your Node.js process encounters an unrecoverable failure.

Why Standard Logs Aren't Enough

When a process crashes due to an unhandled exception, your standard logging stream might lose the data currently residing in the heap. While a stack trace tells you where the code broke, it rarely tells you why the system was in that state. To perform a true "post-mortem" analysis, you need a snapshot of the process environment and, ideally, a heap dump.

Automating the Post-Mortem

We leverage the uncaughtException event to intercept the final moments of the process. Rather than simply exiting, we use this window to capture the state.

const v8 = require('v8');
const fs = require('fs');

process.on('uncaughtException', (err) => {
  // 1. Capture environment state
  const crashData = {
    error: err.message,
    stack: err.stack,
    env: process.env,
    memoryUsage: process.memoryUsage(),
    uptime: process.uptime()
  };

  // 2. Write to a persistent crash log
  fs.writeFileSync('crash-dump.json', JSON.stringify(crashData, null, 2));

  // 3. Generate a V8 heap snapshot for deep inspection
  const snapshotPath = `heapdump-${Date.now()}.heapsnapshot`;
  fs.writeFileSync(snapshotPath, v8.serializeHeapSnapshot());

  process.exit(1);
});

The Strategy

  1. Environment Capture: Serializing process.env (filtered for secrets) is crucial for identifying configuration drifts or missing feature flags that might have triggered the crash.
  2. Resource Insight: Storing process.memoryUsage() helps identify if the crash was a byproduct of an impending OOM (Out of Memory) event.
  3. Heap Snapshots: Using v8.serializeHeapSnapshot() allows you to load the exact state of your objects into Chrome DevTools later. This turns a "black box" crash into a debuggable timeline of objects and references.

By automating these steps, you stop guessing why a service crashed and start analyzing the exact state of the runtime, significantly reducing your Mean Time to Recovery (MTTR).

Key Takeaway: Never let a process die silently; automate the snapshotting of its runtime environment and heap state to ensure every crash provides the data necessary for a post-mortem analysis.