我听说
sudo launchctl limit maxfiles 64000 unlimited
和
conf=/etc/sysctl.conf
if sudo cat $conf | command rg kern.maxfiles ; then
ecerr "kern.maxfiles is already set in $conf"
else
sudo echo 'kern.maxfiles=40480
kern.maxfilesperproc=28000' >> "$conf"
fi
适用于以前版本的 macOS,但这些都不适用于 Big Sur。
答案1
Big Sur 不再支持 /etc/sysctl.conf。要进行持久更改,可以在启动时使用 /Library/LaunchDaemons/com.startup.sysctl.plist 中的启动守护程序发出 systctl
<?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>com.startup.sysctl</string>
<key>LaunchOnlyOnce</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/sysctl</string>
<string>kern.maxfiles=40480</string>
<string>kern.maxfilesperproc=28000</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
并使用
chown root:wheel /Library/LaunchDaemons/com.startup.sysctl.plist
launchctl load /Library/LaunchDaemons/com.startup.sysctl.plist
答案2
我在 Big Sur v11.6 上成功使用了以下技术
所以看起来这里有多个设置在起作用。
ulimit -Sn
和返回的ulimit -Hn
每个进程的软限制和硬限制的数字。
第一个返回的数字launchctl limit maxfiles
是每个进程的软限制,第二个返回的数字是每个进程的硬限制。
然后结果sysctl -a | grep maxfiles
显示kern.maxfiles
,kern.maxfilesperproc
其中kern.maxfiles
应该是所有进程的硬限制,并且kern.maxfilesperproc
应该是单个进程的硬限制。
看来我可以通过添加文件来永久设置所有这些/Library/LaunchDaemons/limit.maxfiles.plist
内容如下,其中 524288 对应软限制,16777216 对应硬限制。
<?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>524288</string>
<string>16777216</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
为了使文件生效,您需要确保它由 root 拥有并且拥有组 wheel。
sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
您还需要加载守护进程。
sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
最后,为了让这影响输出ulimit -Sn
,ulimit -Hn
我需要重新启动我的机器。
注意:通过 launchctl 设置每个进程的软限制和硬限制似乎是一个错误,它会影响内核每个进程的最大值和最大文件限制,但事实就是如此,所以我选择了足够大的值,我想我不太可能会遇到任何麻烦。
答案3
尝试:
sudo sysctl kern.maxfiles=64000 kern.maxfilesperproc=28000
不幸的是不是重启后仍会持续存在。将这些添加到 /etc/sysctl.conf 似乎在 Big Sur 中不起作用。
要查看当前设置,请使用:
sysctl -a | grep maxfiles
答案4
我发现这个步骤在 Big Sur 上对我有用:
按照下面的说明启用服务器性能模式(不要忘记重新启动) https://support.apple.com/en-us/HT202528
然后是这个:
sudo launchctl limit maxfiles 9000000 9999999
最后是这个(注意这里不要使用 sudo):
ulimit -Sn 9000000
PS:遗憾的是,最后两个命令不是持久重启,因此每次需要时都需要执行它们,或者将其包含在脚本中。或者将其添加到 Big Sur 主目录中的 ~/.zshrc 文件中。