有没有办法修复 OS X 10.7.1 上的“系统中打开的文件太多”错误?

有没有办法修复 OS X 10.7.1 上的“系统中打开的文件太多”错误?

我需要摆脱 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运行正常。您可能需要启动新的登录会话。

相关内容