在 OSX Yosemite 中打开文件限制不像以前那样工作

Ang*_*ocA 23 ulimit osx-yosemite macos

我刚刚将 Mac OS X 更新为 Yosemite,现在有些应用程序无法运行(IBM DB2)。我知道我需要将 Open Files 设置为 65000,但是该命令不起作用。

Andress-MBP:~ root# ulimit -n 12288
Andress-MBP:~ root# ulimit -n 12289
-sh: ulimit: open files: cannot modify limit: Invalid argument
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,我该如何解决问题?

小智 29

似乎有一种完全不同的方法来更改每个 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> 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 更改新文件的所有者:

    sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
    
    Run Code Online (Sandbox Code Playgroud)
  3. 加载这些新设置:

    sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
    
    Run Code Online (Sandbox Code Playgroud)
  4. 最后,检查限制是否正确:

    launchctl limit maxfiles
    
    Run Code Online (Sandbox Code Playgroud)

  • 期待 macOS 10.13 的新答案!:) (7认同)

小智 22

我看到你问了这个问题。

您必须处理一个内核限制, kern.maxfiles 这是内核限制,在设置 ulimit 时不能超过。

有关如何使用 sysctl 操作 kern.maxifiles 的说明,请参阅 Krypted 博客页面Mac OS X中的最大文件数

我还没有在我的 Mac 上加载 Yosemite。sysctl -w kern.maxfiles=65000小牛队的作品,默认情况下具有相同的 kern.maxfiles=12288 限制。

我检查了我的 VM OS X 10.6.8,它有相同的限制,这就引出了它在 OS X 版本之前是如何工作的问题。

有一个幻灯片分享(用于 Mac OS X 的 DB2 安装和设置用于 Mac OS X 的 DB2)显示了使用 DB2 的推荐限制,请参阅第 7 页的增加系统参数

增加系统参数

打开 /etc/sysctl.conf(如果尚不存在,则创建它)并插入以下设置。这些设置增加了 DB2 在 Mac 上工作所需的共享内存和用户限制的一些设置。

以下添加到/etc/sysctl.conf
kern.sysv.shmmax = 1073741824
kern.sysv.shmmin = 1
kern.sysv.shmmni = 4096
kern.sysv.shmseg = 32
kern.sysv.shmall = 1179648
kern.maxfilesperproc = 65536
内核.maxfiles=65536

听起来您/etc/sysctl.conf在升级时丢失了文件。


小智 12

在 Mac OS 10.10 中,似乎 ulimit 设置不能超过 launchctl 限制设置。

因此,您应该首先在终端中运行launchctl limit maxfiles以获取当前设置:

launchctl limit maxfiles
maxfiles    256            unlimited 
Run Code Online (Sandbox Code Playgroud)

所以在我的情况下,软限制是 256,硬限制是无限的。然后,如果我想将软限制设置为 512:

sudo launchctl limit maxfiles 512 unlimited
Run Code Online (Sandbox Code Playgroud)

可以在此处找到 launchctl 设置限制的详细用法:https : //developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/launchctl.1.html

  • “launchctl limit maxfiles unlimited unlimited ; launchctl limit maxfiles”表示 10240 是可以输入的最大限制。静默使用较大的数字会失败,保留与以前一样的设置。 (2认同)