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

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

我正在尝试增加用户允许的打开文件数。 这是我的eclipse java应用程序,其中1024的当前限制是不够的。

根据我到目前为止发现的post,我应该能够插入线路

/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身份运行,我的应用程序仍然因为“Too Many Open File”exception而崩溃!

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

我该怎么做呢? 我看过其他几个post但没有运气!

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

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

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

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

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

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

我有很多麻烦让这个工作。

使用以下内容可以更新它,无论您的用户是否允许。

 sudo sysctl -w fs.inotify.max_user_watches=100000 
Interesting Posts