【问题标题】:Node.js and open files limit in linuxNode.js 和 Linux 中的打开文件限制
【发布时间】:2014-12-07 05:51:10
【问题描述】:

我运行一个 node.js 客户端,它向我的服务器发送大量请求(也是用 node.js 编写的)。

服务器获取特定文件的请求,并将其上传到 S3。

两分钟后我收到以下错误,一切顺利:

{ [NetworkingError: getaddrinfo ENOTFOUND]
  message: 'getaddrinfo ENOTFOUND',
  code: 'NetworkingError',
  errno: 'ENOTFOUND',
  syscall: 'getaddrinfo',
  region: 'us-east-1',
  hostname: 'XXXX.s3.amazonaws.com',
  retryable: true,
  time: Sun Oct 12 2014 11:27:54 GMT-0400 (EDT),
  _willRetry: false }

我做了一个小研究后,发现它发生在probably because I'm trying to open too many file handles, or sockets, which can really only happen after a while.

但据我了解,node.js 应该为我封装这个问题。也就是说node.js应该理解文件描述符的限制,根据这个限制打开一个新的。这就是基于事件使用一个用户线程的好处(我错在哪里了?)

如果node.js不这样做,这个错误的最佳解决方案是什么,不是增加我的打开文件限制(这是一个坏主意,因为我们需要在这台机器上具有良好的性能。这个等等, 我如何确定如果我增加数字,这个错误不会再次出现?我怎么知道操作系统应该有这个应用程序的数字?)

【问题讨论】:

  • 这不是因为您达到了打开文件描述符的限制。如果你是,你会看到EMFILE,而不是ENOTFOUNDENOTFOUND 表示找不到该主机名的主机。检查您的 DNS 服务器是否可以从运行您的节点脚本的系统上的 shell 提示符中使用类似 ping XXXX.s3.amazonaws.com 的名称解析该主机名。
  • 也许远程端点在之前的请求中崩溃了?也许一些监控系统会在一段时间后自动重新启动它......?您绝对应该挖掘您可用的任何服务器日志。

标签: linux node.js amazon-web-services amazon-s3


【解决方案1】:

Ubuntu 中的默认打开文件描述符为 1024。 您可以使用 ulimit -n 从终端设置

ulimit -n   #a number

但这只会对当前登录会话进行更改。要使更改永久生效,请使用这些命令。

ulimit -n   #see the number of open files

sudo vi /etc/security/limits.conf    #open the file in vi

现在同时设置:

用户软文件9000

用户硬文件 65000

root 软文件 9000

root hard nofile 65000

sudo vi /etc/pam.d/common-session

现在添加这一行:

需要会话 pam_limits.so

http://posidev.com/blog/2009/06/04/set-ulimit-parameters-on-ubuntu/

编辑:

关于如何在不弄乱 ulimit 的情况下解决此问题,那么您必须将触发的请求总数限制为小于当前的 ulimit -n。

通过创建一个 Http 长寿命连接池并开始通过它们推送您的请求,或者您限制从您的应用程序触发的最大并发请求,并且任何超过此限制的请求将它们添加到队列中,以便您稍后处理它们。

这只是一个概念,如果您在此问题上需要更多帮助,请向我们展示一些代码,以便我们可以想象您正在尝试做什么。

希望这会有所帮助。

【讨论】:

  • 您可能无权在随机的云服务器提供商上执行这些操作。此外,OP 的问题暗示了问题所在,但似乎错误不是来自太多打开的文件。
  • 然而,根据 OP 当前的问题,这是正确的答案。操作系统文件限制就是这样 - 操作系统文件限制。编程语言与它无关。
猜你喜欢
  • 2013-01-10
  • 2014-09-17
  • 1970-01-01
  • 2010-09-07
  • 2018-07-19
  • 1970-01-01
  • 2018-01-06
  • 2010-11-10
相关资源
最近更新 更多