为什么它无法为非root用户获取超过4096个最大打开文件?

尽管遵循与此问题相关的每个StackExchange答案,我似乎无法在Ubuntu 14.04上增加非root用户的nofile限制。 到目前为止我有:

 $ cat /etc/security/limits.d/custom.conf @www-data hard nofile 50000 @www-data soft nofile 50000 # even tried specifying the username directly: myuser hard nofile 50000 myuser soft nofile 50000 $ grep 'limits' /etc/pam.d/common-session* /etc/pam.d/common-session:session required pam_limits.so /etc/pam.d/common-session-noninteractive:session required pam_limits.so $ cat /proc/sys/fs/file-max 101232 

重新启动,登录,并:

 $ ulimit -n 4097 -bash: ulimit: open files: cannot modify limit: Operation not permitted 

对于非root用户,似乎仍然以某种方式限制了4096最大值。

使用Ubuntu 14.04我得到了描述的硬限制:

 user@notebook:~$ ulimit -Hn 4096 

我可以使用ulimit降低它,但不能增加它,就像问题所描述的那样。 正如ulimit的手册所描述的:

只有root才能增加硬限制

所以我试图在/etc/security/limits.conf设置一个更高的限制,如下所示:

 user hard nofile 9999 

和一个像ssh localhost -l user这样的新登录给了我新的限制:

 user@notebook:~$ ulimit -Hn 9999 

希望这也适合你。

我想这篇文章解决了你的问题。

基本上你应该使用ulimit命令来增加可用资源。

例如:

使用以下命令命令显示打开的文件描述符的最大数量:

 cat /proc/sys/fs/file-max 

要查看硬值和软值,请按如下方式发出命令:

 # ulimit -Hn # ulimit -Sn 

要查看httpd或oracle用户的硬值和软值,请按如下方式发出命令:

 # su - username 

要修复最大文件数,可以通过在内核变量/ proc / sys / fs / file-max中设置新值来增加打开文件的最大数量,如下所示(以root身份登录):

 # sysctl -w fs.file-max=100000 

以上命令强制限制为100000个文件。 您需要编辑/etc/sysctl.conf文件并放入以下行,以便重新启动后设置将保持原样。 为此,请按如下方式附加config指令:

 fs.file-max = 100000 

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

 # sysctl -p 

使用命令validation您的设置:

 # cat /proc/sys/fs/file-max 

要么:

 # sysctl fs.file-max 

上面的过程设置了系统范围的文件描述符(FD)限制,但是您可以通过编辑/etc/security/limits.conf来编辑/etc/security/limits.conf文件,从而将httpd (或任何其他用户)用户限制为特定限制。并设置限制如下:

 httpd soft nofile 4096 httpd hard nofile 10240 

然后检查它们:

 # su - httpd $ ulimit -Hn $ ulimit -Sn 

如果你在其他Linux发行版上遇到问题,请检查/etc/pam.d/login并确保你已经启用了pam_limits.so ,例如

 session required pam_limits.so 

如果是服务,您可以尝试在/etc/systemd/system/{ServiceName}.service设置限制添加LimitNOFILE=65536