如何增加非root用户的打开文件限制?


143

这是在Ubuntu 12.04(精确)64位内核Linux 3.2.0-25-virtual上发生的

我正在尝试增加允许用户打开的文件数。这是针对我的eclipse Java应用程序的,当前的限制是1024还不够。

根据我到目前为止发现的帖子,我应该能够将行放入

/etc/security/limits.conf像这样:

soft nofile 4096
hard nofile 4096

增加允许所有用户使用的打开文件数。

但这对我不起作用,我认为问题与该文件无关。

对于所有用户,无论/etc/security/limits.conf中的内容是什么,默认限制都是1024(更改文件后我重新启动了)

$ ulimit -n
1024

现在,尽管有/etc/security/limits.conf中的条目,但我无法增加它:

$ ulimit -n 2048

-bash:ulimit:打开文件:无法修改限制:不允许操作奇怪的部分是我可以向下更改限制,但不能向上更改限制-甚至返回到低于原始限制的数字:

$ ulimit -n 800
$ ulimit -n
800

$ ulimit -n 900

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

作为root,我可以将该限制更改为我想要的任何大小(上下)。它似乎根本不在乎/ proc / sys / fs / file-max中的系统范围限制

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

# ulimit -n 188898
# ulimit -n 
188898

但是,即使我让eclipse以root身份运行,我的应用程序仍然会因为“打开文件太多”异常而崩溃!

到目前为止,我还没有找到提高非root用户打开文件限制的任何方法。

我应该如何正确地做到这一点?我看过其他几篇文章,但没有运气!


6
另外,请注意,在编辑之后/etc/security/limits.conf,您可能必须注销然后再登录,然后才能使用新的最大限制。我这样做了,ulimit -Hs当我将其提高到1000000时仍然显示1000 感到困惑!然后,我注销并重新登录,然后ulimit显示了新的金额。
塞林2014年

对于GUI会话,您可能还会发现此线程(Ubuntu 16+)也很重要。
WaldemarWosiński18年

Answers:


142

ulimit默认情况下,该命令会更改HARD限制,您(用户)可以降低该限制,但不能提高该限制。

使用-S选项可以更改SOFT限制,范围为0- { HARD }。

我实际上已经别名ulimitulimit -S,因此它始终始终默认为软限制。

alias ulimit='ulimit -S'

至于您的问题,您在中的条目中缺少一列/etc/security/limits.conf

应该有四列,但示例中缺少第一列。

* soft nofile 4096
* hard nofile 4096

第一列描述了世卫组织将要申请的限额。“ *”是通配符,表示所有用户。要提高root的限制,您必须显式输入“ root”而不是“ *”。

您还需要编辑/etc/pam.d/common-session*并将以下行添加到末尾:

session required pam_limits.so

1
如何更改打开文件描述符的最大数量的硬限制?我的问题是我需要允许我的Eclipse应用程序具有尽可能多的打开文件,但是4096的限制还不够,我想将其设置为尽可能高的500000。就像您提到的星星一样,硬限制仍然没有移动。
iCode

1
好吧,您发现/ proc / sys / fs / file-max的值为188,897 ...所以我想说您的上限介于188,000(允许)和500,000(不允许)之间。令您难以置信的是,您同时需要超过65000个打开文件。哇。通常,这是在大铁板上处理的。我会对编程感到怀疑,呃,误解。(敬请
见谅

4
就是这样:会话需要pam_limits.so,谢谢!
lethalman

13
刚开始,我错过了通配符/etc/pam.d/common-session*,只是对其进行了编辑common-session,即使重新启动后,通配符也不起作用。但添加在同一行(针对后pam_limits.so)来common-session-noninteractiveulimit -n一个新的登录(无需重新启动)后显示的新值。FWIW我试图更改root的限制(仅)。
Lambart 2014年

1
还请检查以root用户身份登录时值是否不同。 superuser.com/questions/1200539/…–
Robbo_UK

20

如果您对每个用户使用软限制和硬限制,则可以使用以下方法:

su USER --shell /bin/bash --command "ulimit -n"

检查您的设置是否适用于该特定用户。


5

我很难让它工作。

使用以下内容,无论用户权限如何,都可以对其进行更新。

sudo sysctl -w fs.inotify.max_user_watches=100000

4
我尝试了此操作,因为我遇到了同样的问题,但是它不起作用$ sudo sysctl -w fs.inotify.max_user_watches=100000 fs.inotify.max_user_watches = 100000 $ ulimit -n 1024
grepmaster 2015年
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.