可用内存时,NodeJS exec抛出ENOMEM

时间:2019-01-10 00:56:06

标签: javascript node.js

我正在运行pdfinfo命令来获取有关大小为100KB的pdf的信息。相关代码是

    const pdfInfo = execute(`pdfinfo '${input}' | grep Pages`)
      .then(stdout => {
        var pdfLength = 0;
        pdfLength = stdout.match(/Pages:\s+(\d+)/)[1];
        return pdfLength;
    })
    function execute(command) {
      return new Promise(function (res, rej) {
        exec(command, function (error, stdout, stderr) {
          if (error || stderr) {
            rej(error || stderr);
          } else {
            res(stdout);
          }
        });
      });
    }

处理少量文件后,内存使用量一直在增加

 PM2 details of the process
 Mem: 431 MB    CPU:  0 %  

如果我看到服务器上的可用内存,那就是

/home/core-server # free -m
             total       used       free     shared    buffers     cached
Mem:          2000       1341        659         20         21        173
-/+ buffers/cache:       1145        854
Swap:            0          0          0

内存可用,但仍然出现错误

2019-01-10T00:46:42.266Z Error: spawn ENOMEM
    at ChildProcess.spawn (internal/child_process.js:358:11)
    at spawn (child_process.js:533:9)
    at Object.execFile (child_process.js:216:15)
    at exec (child_process.js:147:18)
    at /home/core-server/helper/ppt2svg.js:42:5
    at new Promise (<anonymous>)
    at execute (/home/core-server/helper/ppt2svg.js:41:10)
    at pdf2svg (/home/core-server/helper/ppt2svg.js:53:18)
    at ppt2svg (/home/core-server/helper/ppt2svg.js:93:12)
    at uploadPresentation.single.err (/home/core-server/api/sessions/index.js:174:25)

请问有什么想法可以解释为什么会发生这种情况吗?

编辑:顺便说一句,服务器上的其他所有设备都工作正常,但是exec方法遇到了这个问题

1 个答案:

答案 0 :(得分:1)

据我所知,node.js具有默认的内存限制。类似于32位上的1G和64位系统上的1.7G。但是,幸运的是,您可以通过在node.js命令行中发出--max_old_space_size=<size>选项来增加它。值<size>的Mb。