javascript - Node.js 捕获生成后引发的 ENOMEM 错误

标签 javascript node.js error-handling try-catch spawn

我的 Node.js 脚本在使用 spawn 时由于抛出 ENOMEM(内存不足)errnoException 而崩溃.

错误:

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)

我已经在为 errorexit 事件使用监听器,但如果出现此错误,它们都不会被触发。

我的代码:

zbarimg = process.spawn('zbarimg', [photo, '-q']);
zbarimg.on('error', function(err) { ... });
zbarimg.on('close', function(code) { ... }); 

完整源代码available .

有什么办法可以防止脚本崩溃吗?如何捕获抛出的 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 字节的交换内存。不好。 Node 可能会占用大量内存,如果内存耗尽时没有可用的交换空间,则必然会发生错误。

添加交换文件的方法因操作系统和发行版而异,但如果你像我一样运行 Ubuntu,你可以按照这些 instructions on adding a swap file :

  1. sudo fallocate -l 4G/swapfile 创建一个 4 GB 的交换文件
  2. sudo chmod 600/swapfile 通过限制对 root 的访问来保护交换文件
  3. sudo mkswap/swapfile 将文件标记为交换空间
  4. sudo swapon/swapfile启用交换
  5. echo "/swapfile none swap sw 0 0"| sudo tee -a/etc/fstab 在重启后保留交换文件(感谢提示,bman !)

关于javascript - Node.js 捕获生成后引发的 ENOMEM 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26193654/

相关文章:

java - 用于在线 cab 项目的 Node.js 或 Java

lambda - Lambda函数中的Pyspark UDF函数错误

javascript - 在动态路由的情况下 react 路由器 4 404 路径

javascript - IE/Edge 单击 SVG 导致错误 - TypeError : Object doesn't support property or method 'blur'

node.js - 无法从 WebStorm 调试远程 docker node.js 应用程序

node.js - OpenShift 上的 EADDRINUSE 与 Node.js

javascript - Oracle Jet 不显示来自 Web 服务的数据

javascript - 想要模糊 twitter-bootstrap 模式加载的背景。 JavaScript 代码不工作

javascript - 无法在 'insertBefore' : parameter 1 is not of type 'Node' 上执行 'Node'

scala - future [A] 与 future [Throwable\/A]