Si tu API de Node.js se congela, normalmente no es porque «Node sea lento». Es por trabajo pesado del sistema operativo y un control asíncrono mal resuelto.
Dos errores clásicos:
- Usar exec() para tareas grandes
- Dejar que las promesas y los procesos sigan para siempre
Problema #1: exec() consume memoria
exec() acumula toda la salida en memoria. Los PDF grandes, los videos o los registros pueden:
- Disparar el uso de RAM
- Bloquear el bucle de eventos
- Congelar tu API
Problema #2: promesas que nunca se detienen ☠️
Incluso con spawn podés desperdiciar CPU si:
- Usás Promise.race() sin detener la tarea que pierde
- Resolvés o rechazás una promesa, pero dejás el proceso ejecutándose
- Te olvidás de los tiempos de espera o del manejo de señales
El resultado: procesos que quedan vivos y consumen CPU.
La forma correcta: spawn y control del ciclo de vida
Un ejemplo con un comando de consola sencillo, ffmpeg, aunque esto aplica a cualquier herramienta:
const { spawn } = require('child_process');
function convertVideo(input, output, timeout = 15000) {
return new Promise((resolve, reject) => {
const ffmpeg = spawn('ffmpeg', ['-i', input, output]);
const timer = setTimeout(() => {
ffmpeg.kill('SIGKILL'); // kill the real work
reject(new Error('Conversion timed out'));
}, timeout);
ffmpeg.on('close', code => {
clearTimeout(timer);
if (code === 0) {
resolve();
} else {
reject(new Error(`ffmpeg failed (${code})`));
}
});
ffmpeg.on('error', reject);
});
}Esto busca asegurar:
- Que la salida no se acumule en un búfer como ocurre con exec
- Que no queden promesas pendientes
- Que el trabajo no siga consumiendo CPU sin control
spawn frente a fork
- Usá spawn para herramientas de consola: ffmpeg, git, docker, gs o python
- Usá fork solamente para otro proceso de Node.js con comunicación entre procesos, o IPC
Para recordar
Las aplicaciones de Node que se congelan no tienen solamente un problema de memoria. Tienen un problema de control.
- Procesá el trabajo pesado con spawn
- Siempre resolvé o rechazá la promesa
- Detené lo que iniciás
¡No te olvides!

