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

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

尽管我关注了与此问题相关的每个 StackExchange 答案,但我似乎无法增加nofileUbuntu 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

重新启动、登录并且:

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

那里仍然对于非root用户来说,最大限制似乎为4096。

答案1

使用 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

希望这对你也有用。

答案2

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

基本上,您应该使用 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文件并添加以下行,以便在重启后设置保持不变。为此,请附加一个配置指令,如下所示:

fs.file-max = 100000

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

# sysctl -p

使用命令验证您的设置:

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

或者:

# sysctl fs.file-max

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

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

答案3

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

相关内容