我需要摆脱 OS X 10.7.1 上令人厌烦的“系统中打开的文件太多”限制。
有办法吗?
答案1
根据这篇有用的文章(我建议阅读):
默认情况下,Mac OS X 可以打开的最大文件数设置为 12,288,而给定进程可以打开的最大文件数为 10,240。
您可以使用以下方法检查:
sysctl kern.maxfiles
sysctl kern.maxfilesperproc
您可以通过以下方式增加限制(风险自负):
sysctl -w kern.maxfiles=20480
(或您选择的任何数字)sysctl -w kern.maxfilesperproc=18000
(或您选择的任何数字)
要使更改永久生效,请使用sudo
输入您的设置/etc/sysctl.conf
(您可能必须创建),如下所示:
kern.maxfiles=20480
kern.maxfilesperproc=18000
/etc/launchd.conf
注意:在 OS X 10.10 或更低版本中,您可以添加类似的设置limit maxfiles
,它将覆盖您在此处输入的任何内容。
再次引用本文:
完成此操作后,内核本身将具有最大文件数,但 shell 可能没有。由于大多数占用这么多文件的进程都将由 shell 启动,因此您需要增加该值。
该命令如下:
ulimit -S -n 2048 # or whatever number you choose
该更改也是临时的;它仅持续当前 shell 会话。如果您希望它在每次打开 shell 时运行,可以将其添加到 shell 配置文件( 或任何其他文件).bashrc
中。.zshrc
答案2
似乎每个 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
答案3
另一个选择可能是找到罪魁祸首:
sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
对于最后一个,您可以看到打开了哪些文件:
sudo lsof -n | grep socketfil
如果需要的话可以终止该进程
kill $pid
来自评论:
值得一提的是,您还可以使用以下命令获取打开文件最多的进程 ID 列表
lsof -n +c 0 | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail
答案4
各位,关于 Mavericks 10.9.4
ulimit -n 2048
运行正常。您可能需要启动新的登录会话。