为什么非 root 用户不能超过 4096 个最大打开文件?

Caf*_*oma 15 ulimit 14.04

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

$ 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
Run Code Online (Sandbox Code Playgroud)

重新启动,登录,并且:

$ ulimit -n 4097
-bash: ulimit: open files: cannot modify limit: Operation not permitted
Run Code Online (Sandbox Code Playgroud)

对于非 root 用户,似乎仍然有最大 4096 的限制。

小智 13

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

user@notebook:~$ ulimit -Hn 4096  
Run Code Online (Sandbox Code Playgroud)

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

只有root可以增加硬限制

所以我试着/etc/security/limits.conf像这样设置一个更高的限制:

user hard nofile 9999 
Run Code Online (Sandbox Code Playgroud)

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

user@notebook:~$ ulimit -Hn 9999
Run Code Online (Sandbox Code Playgroud)

希望这对你也有用。


小智 4

我认为这篇文章解决了您的问题。

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

例如:

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

cat /proc/sys/fs/file-max
Run Code Online (Sandbox Code Playgroud)

要查看硬值和软值,请发出以下命令:

# ulimit -Hn
# ulimit -Sn
Run Code Online (Sandbox Code Playgroud)

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

# su - username
Run Code Online (Sandbox Code Playgroud)

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

# sysctl -w fs.file-max=100000
Run Code Online (Sandbox Code Playgroud)

上述命令强制限制为 100000 个文件。您需要编辑/etc/sysctl.conf文件并添加以下行,以便重新启动后设置保持不变。为此,请附加一个配置指令,如下所示:

fs.file-max = 100000
Run Code Online (Sandbox Code Playgroud)

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

# sysctl -p
Run Code Online (Sandbox Code Playgroud)

使用命令验证您的设置:

# cat /proc/sys/fs/file-max
Run Code Online (Sandbox Code Playgroud)

或者:

# sysctl fs.file-max
Run Code Online (Sandbox Code Playgroud)

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

httpd soft nofile 4096
httpd hard nofile 10240
Run Code Online (Sandbox Code Playgroud)

然后通过以下方式检查它们:

# su - httpd
$ ulimit -Hn
$ ulimit -Sn
Run Code Online (Sandbox Code Playgroud)

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

session required pam_limits.so
Run Code Online (Sandbox Code Playgroud)

  • 嗨布鲁克。不幸的是,我已经尝试过该文章中的建议。虽然“ulimit -Hn”对我来说是新的;它打印出 4096,这是我不断遇到的限制。 (2认同)