这发生在 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
作为 root,我可以随意更改该限制,无论是增加还是减少。它似乎甚至不关心 /proc/sys/fs/file-max 中所谓的系统范围限制
# cat /proc/sys/fs/file-max
188897
# ulimit -n 188898
# ulimit -n
188898
但即使我让 eclipse 以 root 身份运行,我的应用程序仍然会因为“打开文件过多”异常而崩溃!
到目前为止,我还没有找到任何方法来增加非 root 用户的打开文件限制。
我该如何正确地做到这一点?我看过其他几篇帖子,但没有成功!
答案1
该ulimit
命令默认更改 HARD 限制,您(用户)可以降低但不能提高。
使用-S选项来改变柔软的限制,范围从 0-{难的}。
我实际上已将其别名ulimit
为ulimit -S
,因此它始终默认为软限制。
alias ulimit='ulimit -S'
至于您的问题,您的条目中缺少一列/etc/security/limits.conf
。
应该有四列,但是您的示例中缺少第一列。
* soft nofile 4096
* hard nofile 4096
第一列描述了限制适用于哪些人。“*”是通配符,表示所有用户。要提高限制,根,您必须明确输入“root”而不是“*”。
您还需要编辑/etc/pam.d/common-session*
并将以下行添加到末尾:
session required pam_limits.so
答案2
如果您根据每个用户使用软限制和硬限制,则可以使用类似以下方法:
su USER --shell /bin/bash --command "ulimit -n"
检查您的设置是否适用于该特定用户。
答案3
ulimit -S -n 4096
这会将打开文件数(-n)的软限制增加到 4096。
答案4
我为使这个工作顺利进行而遇到了很多麻烦。
使用以下内容允许您更新它,无论您的用户权限如何。
sudo sysctl -w fs.inotify.max_user_watches=100000