DEV Community

Young Gao
Young Gao

Posted on

Graceful Shutdown in Node.js: Stop Dropping Requests (2026)

Graceful Shutdown in Node.js: Stop Dropping Requests

Your server gets a SIGTERM. It dies immediately. In-flight requests get 502s. Here is how to shut down properly.

The Basic Pattern

import http from "http";
let isShuttingDown = false;
const server = http.createServer(app);

async function gracefulShutdown(signal: string) {
  isShuttingDown = true;
  server.close();
  const timeout = setTimeout(() => process.exit(1), 30000);
  await Promise.all([closeDatabase(), closeRedis(), flushLogs()]);
  clearTimeout(timeout);
  process.exit(0);
}

process.on("SIGTERM", () => gracefulShutdown("SIGTERM"));
process.on("SIGINT", () => gracefulShutdown("SIGINT"));
Enter fullscreen mode Exit fullscreen mode

Health Check During Shutdown

app.get("/health", (req, res) => {
  if (isShuttingDown) return res.status(503).json({ status: "shutting_down" });
  res.json({ status: "healthy" });
});
Enter fullscreen mode Exit fullscreen mode

Returning 503 tells the load balancer to stop sending new traffic.

What to Clean Up

  1. Stop accepting new requests
  2. Finish in-flight requests (with timeout)
  3. Close database connection pools
  4. Disconnect from Redis and message brokers
  5. Flush log buffers
  6. Deregister from service discovery

Part of my Production Backend Patterns series. Follow for more practical backend engineering.


You Might Also Like

Follow me for more production-ready backend content!


If this helped you, buy me a coffee on Ko-fi!

Top comments (0)