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

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

这发生在 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-{难的}。

我实际上已将其别名ulimitulimit -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

相关内容