How to increase n8n concurrent executions

blackskydigital
PRO

2 months ago

Hi everyone

I'm fairly new to this stuff, so please bear with me - I’m using n8n (self-hosted) on Railway to automate some workflows, but I’ve hit a wall I can’t seem to get past.

The Setup:

  • I’m running n8n in queue mode with:

    • A Primary service

    • 3 Worker services, each set to --concurrency=20

    • A shared Redis and Postgres instance (both working fine)

  • All workers log: * Concurrency: 20, and the main service has EXECUTIONS_MODE=queue set

  • Everything deploys fine - no crashes, no errors

The Problem:
Despite all that, n8n still only runs 10 executions at a time, no matter how many workflows I trigger. I’ve tried:

  • Setting N8N_CONCURRENCY_PRODUCTION_LIMIT=20 across all services

  • Using n8n worker --concurrency=20 in every worker

  • Confirmed logs show the expected concurrency value

  • Added N8N_DISABLE_PRODUCTION_MAIN_PROCESS=true to offload all work to the workers

  • Triggered test workflows with 30+ requests

  • Duplicated the worker multiple times to scale horizontally

But it’s always stuck at 10 active executions, with the rest queued.

What I’m Hoping to Learn:

  • Is Railway possibly limiting worker threads or concurrent requests per container?

  • Could this be a resource throttling thing even if CPU/memory look OK?

  • Or am I missing something simple about how n8n behaves in this kind of setup?

Really appreciate any guidance or clarification - I’m not super technical, but I’m learning as I go. Just want to understand what might be going wrong here.

Thanks a ton!

Solved$10 Bounty

4 Replies

sarahkb125
EMPLOYEE

2 months ago

Hi there - I think this has to do with the n8n setup, not Railway, so opening up to our community to chime in


Status changed to Awaiting User Response Railway about 2 months ago


2 months ago

In queue mode each worker honours the flag you pass (--concurrency=20), but only up to N8N_CONCURRENCY (formerly N8N_CONCURRENCY_PRODUCTION_LIMIT) which defaults to 10 if unset. Workers still print “Concurrency: 20”, yet the scheduler silently clips them to 10 active executions.

Here's how to fix it:

  1. Add N8N_CONCURRENCY=20 (or 0 for “no cap”) to every worker’s environment and redeploy.

  2. Keep EXECUTIONS_MODE=queue on the main instance; workers just need n8n worker --concurrency=20.

  3. Monitor CPU: a 1-vCPU Railway container tops out around 15-20 busy executions, so scale vertically or add more workers if jobs still queue.

With that variable set you should see 20 × workers concurrent runs, and any remaining queue length will reflect real CPU limits rather than the default 10-job ceiling. Let me know if it works for you.


blackskydigital
PRO

a month ago

Hi,

Thanks for that, I tried what you said and it still only ran 10 concurrent executions.

I'm thinking it might be a limitation with Clay.com now as we are sending a HTTP API request from Clay to a webhook in n8n. The only thing I can think of is that they have a cap of 10 concurrent rows, regardless of the n8n settings - I've contacted their support for more details.


blackskydigital

Hi,Thanks for that, I tried what you said and it still only ran 10 concurrent executions.I'm thinking it might be a limitation with Clay.com now as we are sending a HTTP API request from Clay to a webhook in n8n. The only thing I can think of is that they have a cap of 10 concurrent rows, regardless of the n8n settings - I've contacted their support for more details.

sim
FREETop 10% Contributor

a month ago

I have found this on Clay's support page https://community.clay.com/x/support/ieacrv6w16s5/whats-the-rate-limit-for-receiving-webhooks?utm_source=chatgpt.com
"Webhook sources are currently limited to processing up to 10 records per second, with a maximum burst capacity of 20 records. Additionally, each payload sent to the webhook must not exceed 100KB."


Status changed to Solved blackskydigital about 1 month ago