OSX Yosemite 中的打开文件限制不再像以前那样起作用

OSX Yosemite 中的打开文件限制不再像以前那样起作用

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

Andress-MBP:~ root# ulimit -n 12288
Andress-MBP:~ root# ulimit -n 12289
-sh: ulimit: open files: cannot modify limit: Invalid argument

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

答案1

似乎每个 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
    

答案2

我看到你到处问这个问题。

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

查看 Krypted 博客页面Mac OS X 中的最大文件数有关如何使用 sysctl 操作 kern.maxifiles 的描述。

我还没有在 Mac 上安装 Yosemite。sysctl -w kern.maxfiles=65000它适用于 Mavericks,默认情况下具有相同的 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
kern.maxfiles=65536

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

答案3

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

所以你应该先跑launchctl 限制最大文件数在终端获取当前设置:

launchctl limit maxfiles
maxfiles    256            unlimited 

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

sudo launchctl limit maxfiles 512 unlimited

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

相关内容