This content originally appeared on DEV Community and was authored by Young Gao
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"));
Health Check During Shutdown
app.get("/health", (req, res) => {
if (isShuttingDown) return res.status(503).json({ status: "shutting_down" });
res.json({ status: "healthy" });
});
Returning 503 tells the load balancer to stop sending new traffic.
What to Clean Up
- Stop accepting new requests
- Finish in-flight requests (with timeout)
- Close database connection pools
- Disconnect from Redis and message brokers
- Flush log buffers
- Deregister from service discovery
Part of my Production Backend Patterns series. Follow for more practical backend engineering.
This content originally appeared on DEV Community and was authored by Young Gao
Young Gao | Sciencx (2026-03-21T09:57:42+00:00) Graceful Shutdown in Node.js: Stop Dropping Requests (2026). Retrieved from https://www.scien.cx/2026/03/21/graceful-shutdown-in-node-js-stop-dropping-requests-2026/
Please log in to upload a file.
There are no updates yet.
Click the Upload button above to add an update.