BullMQ Production Redis Sizing Guide (noeviction, Lua Streams & 2x CoW Headroom) — RedisVault
BullMQ relies on multi-key Lua scripts across Redis Streams, Hashes, and Delayed ZSETs. Setting an LRU eviction policy silently corrupts active job locks, while AOF rewrites under heavy job churn demand nearly 2x Copy-on-Write RAM. — Modeled deterministically by RedisVault.
In this RedisVault BULLMQ-STREAM sizing blueprint, we separate configured maxmemory from 4 KB POSIX fork() Copy-on-Write shadow pages and kernel socket buffers so background snapshots complete without Linux OOM-Killer termination.
RedisVault Capacity & Copy-on-Write Matrix for BULLMQ-STREAM
| Workload Profile | maxmemory | fork() CoW Reserve | Recommended Node Tier | Projected Target |
|---|---|---|---|---|
| Startup SaaS (500K Jobs • 25 Workers) | 1.8 GB |
+1.7 GB CoW |
8 GB RAM (Hostinger KVM 2) | 48,000 jobs/min |
| Growth API (5M Jobs • 120 Workers) | 6.9 GB |
+6.8 GB CoW |
16 GB RAM (Hostinger KVM 4) | 115,000 jobs/min |
| High-Throughput Webhook (15M Jobs) | 16.8 GB |
+16.5 GB CoW |
32–64 GB VDS (UltaHost 64GB) | 210,000 jobs/min |
| Multi-Region HA (15M Jobs • Sentinel 3x) | 16.8 GB/node |
+16.5 GB/node |
3x 64 GB VDS Cluster | <4s Auto-Failover |
RedisVault Production Configuration Snippet (BULLMQ-STREAM)
# Production BullMQ Redis/Valkey configuration (NEVER use allkeys-lru on BullMQ!)
sysctl -w vm.overcommit_memory=1
cat <<'EOF' >/etc/redis/bullmq.conf
port 6379
maxmemory 7065mb
maxmemory-policy noeviction
activedefrag yes
lazyfree-lazy-expire yes
appendonly yes
appendfsync everysec
aof-use-rdb-preamble yes
auto-aof-rewrite-percentage 100
no-appendfsync-on-rewrite yes
EOF
# Always set removeOnComplete / removeOnFail in your Node.js Queue defaultJobOptions!
RedisVault Kernel & Allocator Tuning Rules for BULLMQ-STREAM
- Enforce maxmemory-policy noeviction strictly: evicting a bull:<queue>:meta or job lock key mid-flight wedges worker concurrency permanently.
- Configure removeOnComplete: { age: 3600, count: 5000 } and removeOnFail: { age: 86400 } in BullMQ so completed job hashes do not leak unbounded jemalloc arenas.
- Enable no-appendfsync-on-rewrite yes so background NVMe bursts during BGREWRITEAOF never block the main single-threaded Lua event loop.
-
Figure 1 (RedisVault): Why setting maxmemory above 50% of physical RAM on write-heavy queues invites Linux OOM-Killer termination.
RedisVault Capacity-Matched Nodes for BULLMQ-STREAM (2026-11-12 Public Rates)
Public starting rates below were retrieved on 2026-11-12 from official vendor pricing pages (hostinger.com/vps-hosting, vultr.com/pricing, ultahost.com/vps-hosting, interserver.net/vps, chemicloud.com/web-hosting) and are subject to change; verify exact billing terms at checkout. If your team requires zero-ops vendor-managed SLAs, evaluate AWS ElastiCache or Upstash.
-
DDR5-KVM8 From $4.99/mo (2026-11-12 rate)Hostinger KVM DDR5 NVMe VPS (Best RAM-per-Dollar for Valkey & BullMQ) Up to 67% OFF + Extra 20% Partner Discount • 8GB–32GB DDR5 ECC RAM for Full 2x BGSAVE CoW Headroom Deploy Hostinger (DDR5-KVM8) for BULLMQ-STREAM via RedisVault ↗
-
HF-3.7GHZ From $6.00/mo (2026-11-12 rate)Vultr High Frequency NVMe (3.7GHz+ Single-Core Redis & Valkey) 3.7GHz+ High-Clock Xeon/EPYC + Local NVMe for Sub-0.25ms p99 Redis & Lua Rate-Limiters (SG/Tokyo/EU/US) Deploy Vultr (HF-3.7GHZ) for BULLMQ-STREAM via RedisVault ↗
-
LOCK-RYZEN From $12.00/mo (2026-11-12 rate)InterServer Price-Lock KVM & Dedicated AMD Ryzen (16GB–128GB) Lifetime Renewal Price-Lock + High-IPC Bare-Metal Ryzen 7900 with 2TB NVMe for Heavy AOF & RDB Histories Deploy InterServer (LOCK-RYZEN) for BULLMQ-STREAM via RedisVault ↗