当前位置: 首页>>技术问答>>正文


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

, ,

问题描述

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

我正在尝试增加用户打开的文件数量。这是针对我的ecplise 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中的system-wide限制

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

# ulimit -n 188898
# ulimit -n 
188898

但即使我得到eclipse作为根运行,我的应用程序仍然崩溃,因为“太多打开文件”异常!

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

我应该如何正确地做到这一点?我看了其他几个帖子,但没有运气!

最佳解决思路

默认情况下ulimit命令会更改您(用户)可以降低但无法升高的HARD限制。

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

实际上,我已将’ulimit’设置为’ulimit -S’,因此它始终默认为软限制。

alias ulimit='ulimit -S'

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

应该有四个柱子,第一个在你的例子中缺失。

* soft nofile 4096
* hard nofile 4096

第一栏描述世卫组织申请的限额。 ‘*’是通配符,即所有用户。要提高root的限制,必须明确地输入’root’而不是’*’。

您还需要编辑/etc/pam.d/common-session*并在结尾处添加以下行:

session required pam_limits.so

次佳解决思路

如果您对每个用户使用软限制和硬限制,则可以使用类似以下内容的内容:

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

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

第三种解决思路

我很难解决这个问题。

通过使用以下内容,您可以在不考虑用户权限的情况下更新它。

sudo sysctl -w fs.inotify.max_user_watches=100000

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/460.html,未经允许,请勿转载。