我的 Node.js 脚本因使用时抛出 ENOMEM(内存不足)errnoException 而崩溃spawn http://nodejs.org/api/child_process.html.
错误:
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)
我已经在使用监听器了error
and exit
事件,但如果发生此错误,他们中没有人会被解雇。
My code:
zbarimg = process.spawn('zbarimg', [photo, '-q']);
zbarimg.on('error', function(err) { ... });
zbarimg.on('close', function(code) { ... });
完整源代码可用的 https://github.com/electerious/zbarimg.
我能做些什么来防止脚本崩溃吗?如何捕获抛出的 ENOMEM 错误?
我遇到了同样的问题,事实证明,我的系统出现了没有启用交换空间。通过运行命令检查是否是这种情况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
查看底行,我们可以看到总共有 0 字节交换内存。不好。节点可能会非常消耗内存,如果内存耗尽时没有可用的交换空间,则必然会发生错误。
添加交换文件的方法因操作系统和发行版而异,但如果您像我一样运行 Ubuntu,则可以按照以下方法操作添加交换文件的说明 https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04:
-
sudo fallocate -l 4G /swapfile
创建 4 GB 交换文件
-
sudo chmod 600 /swapfile
通过限制对 root 的访问来保护交换文件
-
sudo mkswap /swapfile
将文件标记为交换空间
-
sudo swapon /swapfile
启用交换
-
echo "/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab
在重新启动后保留交换文件(感谢您的提示,bman https://stackoverflow.com/users/177006/bman!)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)