Sowohl @kjooleng als auch @ClearStack haben den Nagel auf den Kopf getroffen, was den OOM-Crash und die Gefahr doppelter E-Mail-Versände angeht.
Wenn du 1000 Elemente in einer einzigen linearen Ausführung oder Schleife verarbeitest, sammelt Node.js alle Node-Input-/Output-Status im Speicher an. Die Garbage Collection kann Objekte erst bereinigen, wenn die gesamte übergeordnete Workflow-Ausführung abgeschlossen ist, was zu OOM-Kills auf dem Host führt.
Hier ist das 3-teilige Produktionsmuster zur Lösung sowohl des Speicherlecks als auch des doppelten E-Mail-Risikos:
### 1. Das Sub-Workflow-Batching-Muster (löst OOM)
Statt alle 1000 Leads in einer Schleife im übergeordneten Workflow auszuführen:
1. Verwende einen Split In Batches Node (Batch-Größe: 50-100 Elemente).
2. Übergebe jeden Batch an einen sekundären Worker-Workflow mit dem Execute Workflow Node.
3. Warum das funktioniert: Wenn die Ausführung jedes Sub-Workflows abgeschlossen ist, spült n8n sofort seinen RAM-Footprint und löst den Node.js Garbage Collector aus, wodurch die Speichernutzung über einen 6-Stunden-Lauf flach bleibt.
### 2. Idempotenzprüfung (verhindert doppelte E-Mail-Spam)
Wie @ClearStack richtig anmerkte: Wenn Ausführung #1 bei Lead 260 fehlschlägt und du neu startest, werden Leads 1-260 zweimal per E-Mail kontaktiert.
* Füge in deinem Sub-Workflow direkt vor dem Email Send Node einen If / Filter Node ein, der already_contacted === true prüft (oder deine DB nach email_sent_at IS NOT NULL abfragt).
* Wenn true → Überspringen.
* Wenn false → E-Mail senden und sofort DB-Status auf contacted aktualisieren.
### 3. Node.js Heap-Limit erhöhen (bei Self-Hosted / Docker)
Wenn du n8n selbst über Docker oder PM2 hostest, beträgt das Standard-Node.js-Heap-Speicherlimit etwa 2GB. Für lange laufende Batch-Jobs erhöhe es in deinen Umgebungsvariablen:
NODE_OPTIONS="--max-old-space-size=4096"
(Dies weist dem n8n-Prozess bis zu 4GB RAM zu).
Die Kombination von Sub-Workflows + Batching + Pre-send-Idempotenzprüfungen ist der Standard-Weg, um 10.000+ Lead-Pipelines auszuführen, ohne n8n zum Absturz zu bringen oder Benutzer zuzuspammen.