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


13

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

重新启动,登录并:

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

目前仍然在某种程度上似乎是4096最大的非root用户的限制。


我在Ubuntu 16.10桌面上遇到了完全相同的问题。无论我尝试什么,限制都是1024或
4096。– NathanAldenSr

Answers:


13

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

希望这也对您有用。


谢谢TomTomTom。我已经在/etc/security/limits.d/custom.conf中进行了这样的更改。我确实尝试按照您的建议将其直接放入/etc/security/limits.conf中,但仍然收到“ bash:ulimit:打开文件:无法修改限制:不允许操作”。
咖啡因昏迷2015年

我-只是猜测-以下两个原因之一,为什么它对您不起作用:
TomTomTom,2015年

1
花了我太多时间来编辑不完整的评论。我们走了:我-猜想-这对您不起作用的两个原因之一:1. /etc/security/limits*尚未被登录机制读取-原因不明。2.您在其他位置的硬限制设置为4096,并且“只有根可以增加...”。您可以检查个人资料,例如.bashrc(取决于您的外壳),也可以检查/etc其他可能设置了限制的地方,例如find /etc | grep -e ulimit -e 4096 -e nofile。顺便说一句:您尝试过ssh吗?并且:/etc/ssh/sshd.conf出于某种原因,您是否已更改 为避免使用PAM?
TomTomTom,2015年

是的-所有登录均通过ssh进行。我已禁用UsePAM-一些指南建议将此作为仅允许基于ssh-key的登录的一部分。我会尝试暂时将其打开,以查看是否存在问题。谢谢!
咖啡因昏迷2015年

Afaik,PAM是应读的内容/etc/security/limits*-您可以尝试启用PAM只是为了进行检查。我将尝试禁用PAM,以查看它产生了什么变化并报告结果。---是的!而已!在禁用PAM的情况下,我的限制也为4096,但在中已全部设置为9999 /etc/security/limits.conf
TomTomTom,2015年

4

这个文章,我想地址您的问题。

基本上,您应该使用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

使用以下命令验证您的设置:

# 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

2
嗨,布鲁克。不幸的是,我已经尝试了该文章中的建议。尽管'ulimit -Hn'对我来说并不新鲜;它输出4096,这是我一直碰到的极限。
咖啡因昏迷

0

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


Ubuntu 14.04默认不使用systemd。
number5

Ubuntu 16.04,Tomcat 8为我工作
Arjang
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.