【4.4】MAC too many open files 问题解决

一、原因:

文件句柄数不够,需要调高ulimit 里面的-n 的值。

二、排查

终端输入下面命令

ulimit -a 

得到结果如下

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 256
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 709
virtual memory          (kbytes, -v) unlimited

文件数:

ulimit -n

256

一般默认是256

三、解决

  • 在用户目录下的.bash_profile中的末尾加入ulimit -n 10240
  • 保存后再执行 sudo source ~/.bash_profile 即可

四、可能出现的问题

假如设置的数字特别大,会提示下面的错误

ulimit:124: setrlimit failed: invalid argument

使用下面两个命令看下系统最大数

sysctl kern.maxfiles
sysctl kern.maxfilesperproc

最大连接数限制就是系统所能打开的最大文件数(文件描述符)的限制,分全局和进程两种,相应的命令如下:

  • kern.maxfiles 全局限制,也就是系统默认的最大连接数限制
  • kern.maxfilesperproc 单个进程默认最大连接数限制

假如系统最大数字不满足你的要求,就修改下系统最大数,命令如下(数字自己设定,但是不要太大,有的电脑系统貌似有限定):

sudo sysctl -w kern.maxfiles=65536
sudo sysctl -w kern.maxfilesperproc=65536

然后再设置 ulimit 即可

说明:设置当前shell能打开的最大文件数ulimit为1048576,该值不能大于kern.maxfilesperproc,否则会提示设置失败。

参考资料

个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn