My Node.js script crashes because of a thrown ENOMEM (Out of memory) errnoException when using spawn.
The error:
child_process.js:935
throw errnoException(process._errno, 'spawn');
^
Error: spawn ENOMEM
at errnoException (child_process.js:988:11)
at ChildProcess.spawn (child_process.js:935:11)
at Object.exports.spawn (child_process.js:723:9)
at module.exports ([...]/node_modules/zbarimg/index.js:19:23)
I'm already using listeners for the error
and exit
event, but non of them getting fired in case of this error.
My code:
zbarimg = process.spawn('zbarimg', [photo, '-q']);
zbarimg.on('error', function(err) { ... });
zbarimg.on('close', function(code) { ... });
Full source code available.
Is there anything I can do to prevent the script from crashing? How do I catch the thrown ENOMEM error?
Thanks!
I had the same problem and as it turned out, my system had no swap space enabled. Check if this is the case by running the command free -m
:
vagrant@vagrant-ubuntu-trusty-64:~$ free -m
total used free shared buffers cached
Mem: 2002 233 1769 0 24 91
-/+ buffers/cache: 116 1885
Swap: 0 0 0
Looking at the bottom row we can see we have a total of 0 bytes swap memory. Not good. Node can get pretty memory hungry and if no swap space is available when memory runs out, errors are bound to happen.
The method for adding a swap file varies between operating systems and distributions, but if you're running Ubuntu like me you can follow these instructions on adding a swap file:
sudo fallocate -l 4G /swapfile
Create a 4 gigabyte swapfilesudo chmod 600 /swapfile
Secure the swapfile by restricting access to rootsudo mkswap /swapfile
Mark the file as a swap spacesudo swapon /swapfile
Enable the swapecho "/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab
Persist swapfile over reboots (thanks for the tip, bman!)