如何增加 macOS Big Sur 中的最大打开文件数量?

如何增加 macOS Big Sur 中的最大打开文件数量?

我听说

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.maxfileskern.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 -Snulimit -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 文件中。

相关内容