问题描述
这发生在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