这是在Ubuntu版本12.04(精确的)64位内核Linux 3.2.0-25-virtual

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

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

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

soft nofile 4096
hard nofile 4096


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

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

对于所有用户,默认限制为1024,无论/etc/security/limits.conf(我在更改该文件后重新启动了)

$ 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


作为根,我可以将该限制更改为无论我想要什么,向上或向下。它甚至似乎都不在乎/ proc / sys / fs / file-max中所谓的系统范围限制

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

# ulimit -n 188898
# ulimit -n 
188898


但是我连日食都可以运行作为根用户,由于“打开文件太多”异常,我的应用程序仍然崩溃!

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

我应该如何正确执行此操作?我看过其他几篇文章,但没有运气!

评论

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

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

#1 楼

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

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

我实际上已经将ulimit别名为ulimit -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


评论


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

– iCode
2012年7月11日4:13



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

– lornix
2012年7月11日在21:13



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

–杀手
13年11月14日在11:15

起初,我错过了/etc/pam.d/common-session*末尾的通配符,只是编辑了common-session,即使重新启动后它也无法正常工作。但是在将同一行(用于pam_limits.so)添加到common-session-noninteractive之后,ulimit -n在全新登录后显示了新值(无需重新引导)。 FWIW我试图更改root的限制(仅)。

–伦巴特
14年6月26日在18:12

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

–Robbo_UK
17年7月21日在13:29

#2 楼

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

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


检查设置是否对特定用户有效。 br />

评论


我还能够使用它来根据ulimit规则su解压缩文件。--shell / bin / bash --command“ ulimit -f 8000000 && gunzip -f file_name.gz”

–ÍhorMé
20 Mar 11 '20 at 22:38

#3 楼

我很难让它正常工作。

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

sudo sysctl -w fs.inotify.max_user_watches=100000


评论


我尝试了此操作,因为我遇到了同样的问题,但是它不起作用$ sudo sysctl -w fs.inotify.max_user_watches = 100000 fs.inotify.max_user_watches = 100000 $ ulimit -n 1024

– grepmaster
2015年12月7日在11:12



这在WSL2内的Ubuntu 20.04上,对于一个正在使用包裹进行打包的大型React项目中,也对我有用。对于我来说,它不一定是“打开的文件”,而是“监视的”文件。

– Donmartin
20/09/17在14:33

#4 楼

ulimit -S -n 4096


应将打开文件(-n)的软限制增加到4096。

评论


根据我的经验,软限制很少是问题。这是必须增加的硬限制。

–詹姆斯·摩尔
20-05-30在23:29