如何更改Linux中打开的文件数限制?

如何更改Linux中打开的文件数限制?,linux,Linux,在运行我的应用程序时,我有时会遇到一个错误,即打开的文件太多 运行ulimit-a报告限制为1024。如何将限制提高到1024以上 编辑 ulimit-n2048会导致权限错误。您可以尝试执行ulimit-n2048。这只会重置当前外壳的限制,并且指定的数量不得超过硬限制 每个操作系统在配置文件中都有不同的硬限制设置。例如,Solaris上的硬打开文件限制可以在从/etc/system引导时设置 set rlim_fd_max = 166384 set rlim_fd_cur = 8192 在

在运行我的应用程序时,我有时会遇到一个错误,即打开的文件太多

运行
ulimit-a
报告限制为1024。如何将限制提高到1024以上

编辑
ulimit-n2048
会导致权限错误。

您可以尝试执行
ulimit-n2048
。这只会重置当前外壳的限制,并且指定的数量不得超过硬限制

每个操作系统在配置文件中都有不同的硬限制设置。例如,Solaris上的硬打开文件限制可以在从/etc/system引导时设置

set rlim_fd_max = 166384
set rlim_fd_cur = 8192
在OSX上,必须在/etc/sysctl.conf中设置相同的数据

kern.maxfilesperproc=166384
kern.maxfiles=8192
在Linux下,这些设置通常位于/etc/security/limits.conf中

有两种限制:

  • soft限制只是当前强制执行的限制
  • 硬限制限制标记通过设置软限制不能超过的最大值
软限制可以由任何用户设置,而硬限制只能由root用户更改。 限制是进程的属性。它们是在创建子进程时继承的,因此应在初始化脚本中的系统初始化期间设置系统范围的限制,并且应在用户登录期间设置用户限制,例如使用pam_限制


机器启动时通常会设置默认值。因此,即使您可以在单个shell中重置ulimit,您可能会发现它在重新启动时会重置回以前的值。如果要更改默认值,您可能需要为ulimit命令的存在对引导脚本进行grep

如果您正在使用Linux,并且出现了权限错误,则需要提高
/etc/limits.conf
/etc/security/limits.conf
文件中允许的限制(该文件的位置取决于您的特定Linux发行版)

例如,要允许计算机上的任何人将其打开的文件数增加到10000,请将该行添加到
limits.conf
文件中

*硬文件10000

然后注销并重新登录到您的系统,您应该能够执行以下操作:

ulimit-n 10000

没有权限错误

1)在
/etc/security/limits.conf

webuser hard nofile 64000
然后以webuser身份登录

su - webuser
2) 为webuser编辑以下两个文件

通过运行

echo "ulimit -n 64000" >> .bashrc ; echo "ulimit -n 64000" >> .bash_profile
3) 注销,然后重新登录,并验证所做的更改是否正确:

$ ulimit -a | grep open
open files                      (-n) 64000

就是这样,它们隆隆作响。

如果您的一些服务在ulimit中受阻,有时将适当的命令放入服务的init脚本会更容易。例如,当Apache正在报告时

[警报](11)资源暂时不可用:apr\u线程\u创建:无法创建工作线程


尝试将
ulimit-s unlimited
放入
/etc/init.d/httpd
。这不需要重新启动服务器。

如果您将limits.conf中的行从“硬”更改为“软”,它将成为新的默认行,并且不需要更改bash配置文件。您似乎在重复额外的步骤。单独设置限制与配置文件的作用相同,但适用于所有会话。您能告诉我如何在windows中使用它吗?@hoyhoy我可以将其更改为
2048
,但不能更改为
4500
为什么@GaneshKrishnan在您提到的linux文件中添加什么?@Pritam Windows没有任何
ulimit
。您必须指定正在使用的内容(例如WSL、Cygwin)。注意:通配符不适用于
root
user。如果要调整
root
限制,您必须指定
root硬文件10000
。@JoshPinter哈哈,我刚刚花了大约3个小时阅读了关于如何更改
ulimit
的每个教程,最后发现我以root身份登录。这就是为什么我一直在
ulimit-a
中看到1024。我更改了通配符,并在
limits.conf
中添加了一个
*
。现在一切都好了,(我使用ssh密钥,不用担心:P)--谢谢@NiCkNewman我很高兴你笑了!这是程序员/系统操作人员的一个好特点。我也做了同样的事,并不那么快乐。很高兴这有帮助!:)SUPLEMENT:您也可以在这个目录中找到一个配置:
/etc/security/limits.d/
。我第一次打开了/etc/security/limits.conf,注意到所有内容都被注释了。那么“hard nofile”的默认值是什么?另请参见:我刚刚在Centos 7(RHEL上也是如此)上浏览了这篇文章,并发表了一篇博文对其进行了介绍,因为我在所有这些文章中都遇到了很多麻烦:。通常在打开文件的同时,您需要增加nproc,它实际上驻留在多个设置文件中。。。如果您使用systemd/systemctl,它有自己的单独设置。这有点疯狂。如果您在linux上使用VSCode,此解决方案可能会有所帮助: