admin管理员组文章数量:1134241
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?
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?
Share Improve this question edited Feb 20, 2021 at 7:17 Mark Rotteveel 109k226 gold badges155 silver badges218 bronze badges asked Oct 4, 2014 at 14:13 Tobias ReichTobias Reich 2,0243 gold badges21 silver badges28 bronze badges 8 | Show 3 more comments6 Answers
Reset to default 248I 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!)
If you ever run into this problem in AWS Lambda, you should consider increasing the memory allocated to the function.
You can try changing the amount of memory node uses with this command:
node ----max-old-space-size=1024 yourscript.js
--max-old-space-size=1024 will allocate 1 gig of memory.
By default node will use 512 mb of ram but depending on your platform you may need to allocate more or less so the garbage collection kicks in when you need it.
If your platform has less than 500 mb of ram available then try setting the memory usage lower to --max-old-space-size=256.
This solved my problem :)
The issue with memory
free -m
fallocate -l 4G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo “/swapfile none swap sw 0 0” | sudo tee -a /etc/fstab
I've had the same problem and fixed with try / catch:
try {
zbarimg = process.spawn('zbarimg', [photo, '-q']);
} catch (err) {
console.log(err);
}
zbarimg.on('error', function(err) { ... });
zbarimg.on('close', function(code) { ... });
I fixed the issue by just disabling and re-enabling my Node Server.
本文标签: javascriptNodejs catch ENOMEM error thrown after spawnStack Overflow
版权声明:本文标题:javascript - Node.js catch ENOMEM error thrown after spawn - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736825946a1954487.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
error
handler? – mscdex Commented Oct 6, 2014 at 12:11fork()
(the underlying syscall). See github.com/nodejs/node/issues/25382 – ZachB Commented Jan 8, 2019 at 20:28