【问题标题】:Ruby: Too many open files @ rb_sysopenRuby:打开的文件太多@rb_sysopen
【发布时间】:2017-03-28 14:33:17
【问题描述】:

在使用File.new(big_file)(不关闭它)1016 次(Ubuntu)或 1017 次(CentOS)打开文件后,似乎有一个限制,它会提高:

Too many open files @ rb_sysopen - big_file (Errno::EMFILE)

有没有办法提高这个限制?

在我的系统上,ulimit 设置为 unlimited

【问题讨论】:

  • 检查 ulimit -n 而不是 ulimit。我愿意打赌它是1024
  • 另外,我建议按照here 的一些说明来解决此问题。
  • 正常文件系统限制为 1024 个打开的文件句柄,其中许多已被 Ruby 保留或在内部使用。 ulimit 设置需要在这里调整。解决此问题的一种方法是对/etc/sysctl.conf/etc/security/limits.conf 大惊小怪。
  • @EliSadoff ulimit -n 确实是1024,你赢了!那么我该如何提高呢?
  • @EliSadoff 做到了!谢谢你。我将编辑这个问题并制作另一个 Q/A 来区分这两个不同的问题:Errno::EMFILE 的事实意味着每个进程和file-max= 的问题不起作用。

标签: ruby


【解决方案1】:
  • EMFILE 在您的进程中打开的文件太多。
  • ENFILE整个系统打开的文件太多了。

所以Errno::EMFILE 是由于 ruby​​ 进程打开了太多文件。这个限制可能设置为默认的1024 可以看到:

$ulimit -n
1024

代替:

$ulimit
unlimited

您可以使用this method 提高限制。

【讨论】:

  • 我也有同样的问题,但我的系统是windows。那么我如何为 windows 设置限制。
  • 对于 macOS,您可以通过运行ulimit -n 8192来提高限制
  • @huwr 你选择 8192 有什么原因吗?
  • @kraftydevil 没有理由。我只是喜欢这个数字。
  • 我的 ulimit -n256(macOS Mojave,Mac Mini 2012)。我用ulimit -n 1024改了,问题就消失了。
猜你喜欢
  • 1970-01-01
  • 2012-05-09
  • 2011-07-18
  • 2019-10-30
  • 2011-01-03
  • 2011-08-05
  • 2014-03-31
  • 2017-03-03
相关资源
最近更新 更多