我刚刚将 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) 您需要:
创建
/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>
更改新文件的所有者:
sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
加载这些新设置:
sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
最后,检查限制是否正确:
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