使用Node JS child_process.spawn运行脚本时打开的文件太多

时间:2011-05-17 19:31:08

标签: node.js spawn child-process

情境:

使用主脚本生成可变数量的子进程多次,以便对服务器执行负载测试。

主脚本最初产生它可以的所有子节点(根据其配置设置),然后当子节点进程退出时,如果配置请求更多运行,则新的子节点将被旋转。

我所看到的是在尝试启动第83个子进程时立即失败。 83?

我没有做任何事情来明确关闭作为子生成过程的一部分打开的文件,但可能这不是开放代码的工作,而是child_processes模块代码?

我非常好奇82个子进程的神奇数量。这似乎表明某个节点的限制或我系统上节点的某种组合?

理想情况下,我有一些缺乏知识,这个问题会回答,或者有人可以建议另一种方法来启动不会遇到这个问题的脚本子进程?

我也有兴趣了解NodeJS的Web Worker API的状态。任何人都知道这件事吗?

详情:

  • NodeJS v0.4.7
  • Mac OS X v10.6.7
  • ulimit -n = 256
  • 将成功运行的衍生儿童的幻数= 82 (意味着> 82衍生的过程会抛出“太多打开的文件”错误)

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

我的猜测是系统正在按照你所说的去做。 82个进程是每个进程3个打开的文件。 STDIN,STDOUT,STDERR。砰。你已经使用标准的3个文件描述符命中了你的ulimit。使用ulimit -n 512运行,我打赌你能够运行两倍的孩子。