Describe the problem/error/question
We are running n8n in Queue Mode on Google Cloud Run (Serverless). We discovered a massive hidden cost trap regarding Webhook nodes configured to “Respond when last node finishes”.
If our n8n instance receives a webhook after being idle for >10 minutes, the worker executes the job perfectly and instantly (in ~3 seconds). However, the Main instance hangs indefinitely, waiting for the worker’s response. Because Main is stuck waiting, the HTTP request stays open, and Google Cloud Run bills us for “Active CPU Time” for up to 15+ minutes until the internal Cloud Run timeout kills it.
What is the error message (if any)?
There is no explicit error in n8n. The webhook simply never returns a response to the client. Cloud Run metrics show the request latency spiking to ~1000 seconds (16.7 minutes).
Information on your n8n setup
• n8n version: 2.30.5
• Database: Postgres (Cloud SQL)
• Queue: Redis (Upstash Serverless / Memorystore)
• Running n8n via: Google Cloud Run (Queue Mode, Main & Worker separated)
• Operating system: Node.js 24 (Custom Docker Image)
Root Cause Analysis:
The issue is a “Silent Drop” of the Redis Pub/Sub TCP connection by the Google Cloud VPC / NAT. Google silently drops idle TCP connections after exactly 10 minutes without sending a TCP RST packet.
When Main wakes up/receives a webhook at minute 15, it pushes the job to Redis (which works, because write commands create a new connection or auto-reconnect), but Main waits for the worker’s completion signal on the old, dead Pub/Sub ( SUBSCRIBE ) channel. Main has no idea the channel is dead, so it waits forever.
Our Current Workarounds:
1. High-Frequency Ping: We increased our synthetic health checks to run every 9 minutes so the Redis connection is never idle for >10 minutes.
2. Dummy Keep-Alive: Triggering a dummy workflow (Webhook → NoOp) every 5 minutes via Cloud Scheduler just to keep the SUBSCRIBE channel warm.
My Question to the Community & n8n Team:
Is there a way to pass ioredis keep-alive options (like enableKeepAlive: true ) via n8n environment variables to prevent silent NAT drops? For Postgres, we fixed this using Cloud SQL TCP keepalive flags, but we can’t do this for Redis since n8n hides the Redis connection settings. How are other enterprise users solving this on serverless infrastructures?