Ubuntu的 – 打开的文件太多了?

我有一个websocket服务。 它很平坦,有错误:“打开的文件太多”,但我已经设置了系统configuration:

/etc/security/limits.conf * soft nofile 65000 * hard nofile 65000 /etc/sysctl.conf net.ipv4.ip_local_port_range = 1024 65000 ulimit -n //output 6500 

所以我认为我的系统configuration是正确的。

我的服务由主pipepipe理,可能是主pipe限制?

检查过程由主pipe开始:

 cat /proc/815/limits Max open files 1024 4096 files 

检查过程手册开始:

 cat /proc/900/limits Max open files 65000 65000 files 

原因是用监督pipe理服务。 如果我重新启动pipe理程序并重新启动subprocess,它是“最大打开文件”确定(65000),但错误(1024)当重新启动系统pipe理员自动启动。

可能是pipe理员启动级别太高,系统configuration在pipe理员启动时不工作?

编辑:

系统:Ubuntu 12.04 64bit

这不是pipe理员问题,系统重启后所有进程自动启动都不使用系统configuration(最大打开文件= 1024),但重新启动就可以了。

更新

也许问题是:

  • https://bugs.launchpad.net/ubuntu/+source/upstart/+bug/938669
  • http://bryanmarty.com/blog/2012/02/10/setting-nofile-limit-upstart/
  • 增加Ubuntu / Upstart(initctl)的最大打开文件

现在的问题是,如何设置全局nofile限制,因为我不想在每个我需要的暴发脚本中设置nofile限制。

我有同样的问题。 即使ulimit -Sn显示我的新限制,运行supervisorctl restart all并捕获proc文件没有显示新的限制。

问题是supervisord仍然有原始的限制。 因此,它创建的任何子进程仍然具有原始的限制。

所以,解决办法是杀死并重新启动supervisord

通过为文件中的所有用户设置限制来解决此问题:

 $ cat /etc/security/limits.d/custom.conf * hard nofile 550000 * soft nofile 550000 

设置限制后重新启动服务器。

非常重要: /etc/security/limits.d/文件夹包含用户特定的限制。 在我的情况下,hadoop 2(cloudera)相关的限制。 这些用户特定的限制将覆盖全局限制,所以如果您的限制没有被应用,请务必检查文件夹/etc/security/limits.d//etc/security/limits.conf文件中的特定用户限制。

注意:设置用户特定的限制是所有情况下的方法。 应该避免设置全局(*)限制。 在我的情况下,这是一个孤立的环境,只是需要从我的实验中消除文件限制问题。

希望这可以节省一些头发 – 因为我花了太多时间把我的头发块大块!

对任何疲惫的谷歌公司来说:你可能正在寻找监督员配置中的minfds设置。 这个设置似乎对supervisord过程和孩子都起作用。 我有一些其他的策略,包括启动一个shell脚本,在执行实际程序之前设置限制,但这是唯一的工作。

尝试编辑/etc/sysctl.conf并全局调整限制例如:

强制限制为100000个文件。

 vi /etc/sysctl.conf 

附加:

 fs.file-max = 100000 

保存并关闭文件。 用户需要注销并重新登录才能使更改生效或者只需键入以下命令:

 sysctl -p 

你可以找到你限制:

  cat /proc/sys/fs/file-max 

或者sysctl -a | grep file sysctl -a | grep file

在/ proc / sys / fs / file-max文件中更改它,或者使用以下命令:

 sysctl -w fs.file-max=100000 

luqmaan的答案是我的门票,除了一个小小的警告: *通配符不适用于Ubuntu的根(如limits.conf的评论中所述)。

如果以root用户身份启动supervisord则需要明确设置root的限制:

vi /etc/security/limits.conf

 root soft nofile 65535 root hard nofile 65535 

你可以这样设置服务的限制:

添加: LimitNOFILE=65536在:/ /etc/systemd/system/{NameofService}.service / LimitNOFILE=65536

我认为这与打开的文件无关(这只是错误的错误信息)。 您的应用程序使用的任何端口。 1.尝试使用命令查找进程ID

 ps aux 

2.用命令杀死进程(例如8572)

 sudo kill -9 8572 

3.再次启动您的应用程序。