当运行我的应用程序时,我有时会得到一个关于 "打开的文件太多 "的错误。
运行 "ulimit -a "报告说,限制是1024。 我怎样才能把限制提高到1024以上?
编辑
ulimit -n 2048
导致权限错误。
你可以尝试做一个ulimit -n 2048
。 这只会重置你当前shell的限制,而且你指定的数字不能超过硬限制。
每个操作系统在配置文件中都有一个不同的硬限制设置。 例如,Solaris上的硬开文件限制可以在启动时从/etc/system设置。
set rlim_fd_max = 166384
set rlim_fd_cur = 8192
在OS X上,这个数据也必须在/etc/sysctl.conf中设置。
kern.maxfilesperproc=166384
kern.maxfiles=8192
在Linux下,这些设置通常在/etc/security/limits.conf中。
有两种限制。
软限制可以由任何用户设置,而硬限制只有root可以改变。 限制是进程的一个属性。它们在创建子进程时被继承,所以全系统的限制应该在系统初始化时在init脚本中设置,用户的限制应该在用户登录时设置,例如使用pam_limits。
在机器启动时通常会有默认的设置。 因此,即使你在个别的shell中重置了你的ulimit,你可能会发现它在重启时又恢复到了以前的值。 如果你想改变默认值,你可能想在你的启动脚本中搜索存在的ulimit命令。
如果你使用的是Linux,并且得到了权限错误,你将需要在/etc/limits.conf
或/etc/security/limits.conf
文件中提高允许的限制(该文件的位置取决于你的具体Linux发行版)。
例如,要允许机器上的任何人将他们打开的文件数量提高到10000个,在limits.conf
文件中添加这一行。
* hard nofile 10000
。
然后注销并重新登录到你的系统,你应该可以做到。
ulimit -n 10000
。
而不会出现权限错误。
/etc/security/limits.conf
中添加以下一行webuser hard nofile 64000
然后以网络用户身份登录
su - webuser
通过运行.bashrc和.bash_profile文件追加**。
echo "ulimit -n 64000" >> .bashrc ; echo "ulimit -n 64000" >> .bash_profile
$ ulimit -a | grep open
open files (-n) 64000
就这样,他们轰轰烈烈,轰轰烈烈。