我正在尝试做一些需要大量文件描述符的事情
sudo ulimit -n 12288
是 Snow Leap 想要达到的最高高度;超过这个高度会导致
/usr/bin/ulimit:第 4 行:ulimit:打开文件:无法修改限制:参数无效。
我想将这个数字提高得更高,比如说 100000。可以吗?
答案1
使用ulimit
命令只会更改当前 shell 及其子 shell 的资源限制,并sudo ulimit
创建一个 root shell,调整其限制,然后退出(因此,据我所知,没有实际效果)。
要超过 12288,您需要调整内核的kern.maxfiles
和kern.maxfilesperproc
参数,并且(至少根据这篇博文,这是这次讨论) launchd 限制。您可以使用以下launchctl limit
方法一次性调整所有这些:
sudo launchctl limit maxfiles 1000000 1000000
为了使其永久生效(即重新启动时不会重置),请创建/etc/launchd.conf
包含以下内容:
limit maxfiles 1000000 1000000
然后您可以使用ulimit
(但不使用sudo
)来调整您的进程限制。
答案2
以下内容应能解决大多数解决方案(并按其层次顺序列出):
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
笔记:
- 您需要重新启动才能使这些更改生效。
- 据我所知,在 OS X 下你不能再将限制设置为“无限制”
- launchctl maxfiles 受 sysctl maxfiles 限制,因此不能超过它们
- sysctl 似乎从 launchctl maxfiles 继承了 kern.maxfilesperproc
- ulimit 似乎默认从 launchctl 继承了它的“打开文件”值
- 您可以在 /etc/profile 或 ~/.profile 中设置自定义 ulimit;虽然这不是必需的,但我提供了一个例子
- 与默认值相比,将这些值设置为非常高的数字时要小心 - 这些功能存在稳定性/安全性。我采用了其他网站上写的这些我认为合理的示例数字。
答案3
似乎每个 OS X 版本都有完全不同的方法来更改打开文件的限制!
对于 OS X Sierra(10.12.X) 您需要:
1.Library/LaunchDaemons
创建一个名为的文件limit.maxfiles.plist
并粘贴以下内容(可以随意更改这两个数字(分别是软限制和硬限制):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>limit.maxfiles</string>
<key>ProgramArguments</key>
<array>
<string>launchctl</string>
<string>limit</string>
<string>maxfiles</string>
<string>64000</string>
<string>524288</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
2. 更改新文件的所有者:
sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
3. 加载这些新设置:
sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
4.最后,检查限制是否正确:
launchctl limit maxfiles
答案4
在 Mavericks 上很简单。作为普通用户:
ulimit -n 8192
您可以通过以下方式检查更新的设置
ulimit -a
在我的机器上:
ulimit -a
-t: cpu time (seconds) unlimited
-f: file size (blocks) unlimited
-d: data seg size (kbytes) unlimited
-s: stack size (kbytes) 8192
-c: core file size (blocks) 0
-v: address space (kbytes) unlimited
-l: locked-in-memory size (kbytes) unlimited
-u: processes 709
-n: file descriptors 8192