2011-06-27 10:56:47 +0000 2011-06-27 10:56:47 +0000
102
102

增加雪豹中打开文件描述符的最大数量?

我试图做一些需要大量文件描述符的事情

sudo ulimit -n 12288 是雪豹想达到的最高水平;超过这个水平的结果是

/usr/bin/ulimit: line 4: ulimit: open files: cannot modify limit: Invalid argument.

我想把这个数字提高得更高,比如100000。这可能吗?

答案 (4)

95
95
95
2011-06-27 21:17:50 +0000

使用ulimit命令只能改变当前shell及其子代的资源限制,而sudo ulimit会创建一个根shell,调整其限制,然后退出(因此,就我所见,没有实际效果)。
要想超过12288,你需要调整内核的kern.maxfileskern.maxfilesperproc参数,还需要(至少根据 本篇博客文章,这是 本篇讨论的总结)一个launchd限制。你可以使用 launchctl limit 一次调整所有这些参数:

sudo launchctl limit maxfiles 1000000 1000000

要想让这一切成为永久性的 (即重启时不被重置),创建 /etc/launchd.conf 包含:

limit maxfiles 1000000 1000000

Then 你可以使用 ulimit (但没有 sudo) 来调整你的进程限制。

如果这样做还不行,你可能会遇到内核的大小限制。如果你的模型支持,在64位模式下启动内核可能会有帮助。

42
42
42
2012-12-03 12:07:46 +0000

以下内容应该可以解决大多数的解决方案(并按其层次顺序列出):

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. 当把这些值设置成一个非常高的数字时,要谨慎,因为与它们的默认值相比,这些特性存在稳定性/安全性。我已经采取了这些我认为合理的例子数字,写在其他网站上。

20
20
20
2011-12-10 10:11:12 +0000

似乎 OS X Lion 不允许将 “无限 "作为一个值:

% sudo launchctl limit maxfiles 8192 unlimited
Neither the hard nor soft limit for "maxfiles" can be unlimited. Please use a numeric parameter for both.

为软限制和硬限制提供数值就可以了:

% sudo launchctl limit maxfiles 4096 8192
```。
3
3
3
2018-12-21 14:43:27 +0000

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