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 hasEXECUTIONS_MODE=queue
setEverything 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 servicesUsing
n8n worker --concurrency=20
in every workerConfirmed logs show the expected concurrency value
Added
N8N_DISABLE_PRODUCTION_MAIN_PROCESS=true
to offload all work to the workersTriggered 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!
4 Replies
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:
Add
N8N_CONCURRENCY=20
(or0
for “no cap”) to every worker’s environment and redeploy.Keep
EXECUTIONS_MODE=queue
on the main instance; workers just needn8n worker --concurrency=20
.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.
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.
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