【问题标题】:Too many open files when using NodeJS child_processes.spawn to run scripts使用 NodeJS child_processes.spawn 运行脚本时打开的文件太多
【发布时间】:2011-08-27 12:34:42
【问题描述】:

场景:

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

主脚本最初会生成它可以生成的所有子进程(根据其配置设置),然后当子进程退出时,如果配置请求更多运行,则会启动新的子进程。

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

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

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

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

我也有兴趣了解 NodeJS 即将推出的 Web Worker API 的状态。有人知道吗?

细节:

  • NodeJS v0.4.7
  • Mac OS X v10.6.7
  • ulimit -n = 256
  • 将成功运行的生成子节点的神奇数量 = 82 (这意味着 > 82 生成的 proc 将引发“打开的文件过多”错误)

感谢您的帮助。

【问题讨论】:

  • a) 这听起来像是系统配置问题,b) 每个节点实例一次尝试打开多少个文件,c) ... 是的,82 有点低。

标签: node.js spawn child-process


【解决方案1】:

我的猜测是系统正在按照您所说的进行操作。 82 个进程是每个进程 3 个打开的文件。标准输入、标准输出、标准错误。砰。您已经使用标准的 3 个文件描述符达到了 ulimit。使用 ulimit -n 512 运行,我敢打赌,您将能够运行两倍的孩子。

【讨论】:

  • 有趣。我不知道标准输入、标准输出、标准错误被算作文件。我缺乏 unix 知识又回来咬我。
  • 对不起,进入计划漩涡。我会尽快回复并让您知道。这个解释非常有道理,也是我希望得到的答案。我喜欢知道答案很简单,我只是还不知道。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
  • 2016-11-14
  • 2020-02-19
  • 2011-10-11
  • 1970-01-01
相关资源
最近更新 更多