上发生的。我正在尝试增加允许用户打开的文件数。这是针对我的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用户的打开文件限制。
我应该如何正确执行此操作?我看过其他几篇文章,但没有运气!
#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
评论
另外,请注意,在编辑/etc/security/limits.conf之后,可能必须先注销然后再登录,然后才能使用新的最大限制。我这样做了,但对ulimit -Hs感到困惑,当我将其提高到1000000时仍然显示1000!然后我注销并重新登录,然后ulimit显示了新的金额。对于GUI会话,您可能会发现此线程也很重要(Ubuntu 16+)。