增加 Snow Leopard 中打开文件描述符的最大数量?

增加 Snow Leopard 中打开文件描述符的最大数量?

我正在尝试做一些需要大量文件描述符的事情

sudo ulimit -n 12288是 Snow Leap 想要达到的最高高度;超过这个高度会导致

/usr/bin/ulimit:第 4 行:ulimit:打开文件:无法修改限制:参数无效。

我想将这个数字提高得更高,比如说 100000。可以吗?

答案1

使用ulimit命令只会更改当前 shell 及其子 shell 的资源限制,并sudo ulimit创建一个 root shell,调整其限制,然后退出(因此,据我所知,没有实际效果)。
要超过 12288,您需要调整内核的kern.maxfileskern.maxfilesperproc参数,并且(至少根据这篇博文,这是这次讨论) launchd 限制。您可以使用以下launchctl limit方法一次性调整所有这些:

sudo launchctl limit maxfiles 1000000 1000000

为了使其永久生效(即重新启动时不会重置),请创建/etc/launchd.conf包含以下内容:

limit maxfiles 1000000 1000000

然后您可以使用ulimit(但不使用sudo)来调整您的进程限制。

如果这不起作用,你可能遇到了内核的大小限制。如果你的模型支持它,启动内核64 位模式可能会有帮助。

答案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

笔记:

  1. 您需要重新启动才能使这些更改生效。
  2. 据我所知,在 OS X 下你不能再将限制设置为“无限制”
  3. launchctl maxfiles 受 sysctl maxfiles 限制,因此不能超过它们
  4. sysctl 似乎从 launchctl maxfiles 继承了 kern.maxfilesperproc
  5. ulimit 似乎默认从 launchctl 继承了它的“打开文件”值
  6. 您可以在 /etc/profile 或 ~/.profile 中设置自定义 ulimit;虽然这不是必需的,但我提供了一个例子
  7. 与默认值相比,将这些值设置为非常高的数字时要小心 - 这些功能存在稳定性/安全性。我采用了其他网站上写的这些我认为合理的示例数字。

答案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

相关内容