增加雪豹中打开文件描述符的最大数量?
我试图做一些需要大量文件描述符的事情
sudo ulimit -n 12288
是雪豹想达到的最高水平;超过这个水平的结果是
/usr/bin/ulimit: line 4: ulimit: open files: cannot modify limit: Invalid argument.
我想把这个数字提高得更高,比如100000。这可能吗?
我试图做一些需要大量文件描述符的事情
sudo ulimit -n 12288
是雪豹想达到的最高水平;超过这个水平的结果是
/usr/bin/ulimit: line 4: ulimit: open files: cannot modify limit: Invalid argument.
我想把这个数字提高得更高,比如100000。这可能吗?
使用ulimit
命令只能改变当前shell及其子代的资源限制,而sudo ulimit
会创建一个根shell,调整其限制,然后退出(因此,就我所见,没有实际效果)。
要想超过12288,你需要调整内核的kern.maxfiles
和kern.maxfilesperproc
参数,还需要(至少根据 本篇博客文章,这是 本篇讨论的总结)一个launchd限制。你可以使用 launchctl limit
一次调整所有这些参数:
sudo launchctl limit maxfiles 1000000 1000000
要想让这一切成为永久性的 (即重启时不被重置),创建 /etc/launchd.conf
包含:
limit maxfiles 1000000 1000000
Then 你可以使用 ulimit
(但没有 sudo
) 来调整你的进程限制。
以下内容应该可以解决大多数的解决方案(并按其层次顺序列出):
echo 'kern.maxfiles=20480' | sudo tee -a /etc/sysctl.conf
echo -e 'limit maxfiles 8192 20480\nlimit maxproc 1000 2000' | sudo tee -a /etc/launchd.conf
echo 'ulimit -n 4096' | sudo tee -a /etc/profile
备注。
1.你需要重新启动才能使这些更改生效。 2. AFAIK 在 OS X 下,你不能再将限制设置为 “无限 "了 3. launchctl maxfiles 受 sysctl maxfiles 约束,因此不能超过它们 4. sysctl 似乎从 launchctl maxfiles 继承了 kern.maxfilesperproc 5. 你可以在 /etc/profile 或 ~/.profile 中设置一个自定义的 ulimit;虽然这不是必须的,但我提供了一个例子 7. 当把这些值设置成一个非常高的数字时,要谨慎,因为与它们的默认值相比,这些特性存在稳定性/安全性。我已经采取了这些我认为合理的例子数字,写在其他网站上。
在OS X 10.13.6上,这对我来说是可行的。
$ sysctl kern.maxfiles
kern.maxfiles: 12288
$ sysctl kern.maxfilesperproc
kern.maxfilesperproc: 10240
$ sudo sysctl -w kern.maxfiles=1048600
kern.maxfiles: 12288 -> 1048600
$ sudo sysctl -w kern.maxfilesperproc=1048576
kern.maxfilesperproc: 10240 -> 1048576
$ ulimit -S -n
256
$ ulimit -S -n 1048576
$ ulimit -S -n
1048576