如何增加非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