TypeError:无法读取未定义的属性'addListener'错误:spawn / bin / sh EMFILE

我得到这个错误:

Caught signal; preparing to exit; please wait for 5 seconds [TypeError: Cannot read property 'addListener' of undefined] Caught signal; preparing to exit; please wait for 5 seconds { [Error: spawn /bin/sh EMFILE] code: 'EMFILE', errno: 'EMFILE', syscall: 'spawn /bin/sh', path: '/bin/sh' } 

在这个代码之前,我正在获取日志。 实际上,100个读取一些文件的请求正在被Nodejs服务器接收。 可能是什么问题呢? 我已经检查了最大的进程限制是kernel.pid_max = 32768.实际上它产生的进程less于2000个进程。 我可以看到open files限制在我的帐户已经是15000。

 var path = null; if (request.FileType & requestTypeEnum.LocalProgramFileOnly) { path = "../readfile "; } else { path = "../File-loggedin/readfile "; } var cmd = path + tmpobj.name + " recognize " + (request.isfirefox ? "1" : "0") + " " + logobj.name + " " + resobj.name; var exec = require('child_process').exec; exec(cmd, function (error, stdout, stderr) { if (error !== null) { console.log(request.cid + "closing the connection"); } require("fs").readFile(resobj.name, 'utf8', function (err, data) { if (err) { throw err; } //Write into the database store_request_db_success(request, 'File_Actual_LocalSoftware', null, db_params, data); deduct_balance(request, FileCompanies.LocalSoftware); var ret = getInitializedResponseData(request); ret["decoded_File"] = { File: data, s_reqno: request.s_reqno }; try { conn.sendText(JSON.stringify(ret)); } catch (err) { console.log(request.cid, err); } }); }); 

ulimit -a

  core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 48033 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 15000 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 48033 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited 

事实上,超过15000个打开的文件描述符触及了极限。

我刚刚添加了tmpobj.removeCallback(); 发送响应之后, conn.sendTextconn.sendText之后。 然后,文件描述符在工作完成后closures。

tmpobj是使用tmp.fileSync创build的