哪个命令控制打开文件的限制?


19

哪个命令/配置文件控制OS X上打开文件的限制?OS X 10.5 / 10.6 / 10.7是否有其他命令?下面我探索的选项ulimitsysctl以及launchctl

“打开文件过多”显然是Leopard上的常见错误,也许是OS X的其他版本:

查看打开文件限制的方法有很多(相关?):

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 2048
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 512
virtual memory          (kbytes, -v) unlimited


$ launchctl limit
cpu         unlimited      unlimited      
filesize    unlimited      unlimited      
data        unlimited      unlimited      
stack       8388608        67104768       
core        0              unlimited      
rss         unlimited      unlimited      
memlock     unlimited      unlimited      
maxproc     1024           2048           
maxfiles    2048           4096       

$ sysctl -a | grep files
kern.maxfiles = 32768
kern.maxfilesperproc = 16384
kern.maxfiles: 32768
kern.maxfilesperproc: 16384
kern.num_files: 2049

在上面的一些帖子中声称可以使用以下命令对其进行修改:

sudo launchctl limit maxfiles 16384 32768
sudo ulimit -n 32768
sudo sysctl -w kern.maxfilesperproc=16384
sudo sysctl -w kern.maxfiles=32768

但是,在上述命令中,只有sysctl命令具有明显的效果(即ulimit -nlaunchctl limit在输入上述命令后不显示任何更改,而sysctl -a确实显示了所请求的更改)。

更改操作系统这些参数的相应位置是:

/etc/sysctl.conf
/etc/launchd.conf

我还发现了一个答案,该答案ulimit只能控制当前的shell。

如何在macOS 上向上调整最大文件数 / 最大打开文件数限制?

Answers:


9

以前的简单答案是存在多个限制,而在特定实例中达到的最低限制将产生错误。现在,launchctl limit maxfiles混合版本还包括10.12 。有关实施的详细信息,这个好答案正在得到赏金,应得到比我能提供的更多的选票。

其他相关线程是:

将该ulimit级别设置为较低,以防止一个不良的Shell脚本用打开的文件淹没内核。

kern.maxfilesperproc那里可以在最大文件数中留一点空间,以便一个进程可以使用内核中大部分但不是全部的打开文件处理程序空间。

在正常情况下,kern.maxfiles是最终的限制因素。

在Sierra上,限制为256个打开的文件,最大数量为无限,所以我发现为软限制设置3到4000个文件几乎适用于我们所有的硬件,并且当失控的进程打开太多时仍能使系统响应文件。我们确实希望将开发服务器的数量限制在256个以内,这样我们才能在开发/登台和测试中捕获泄漏和有问题的软件,而不是在生产中查找它。

我不喜欢1万个文件-也许有了APFS和NVMe存储,我们会看到那不是不可思议的一天,但是请尽量保留成百上千个文件限制。尤其是如果您的Mac的进程限制较低,那么用很少的进程打开这么多的文件可能会出现问题。


9

似乎有一种完全不同的方法可以更改每个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

我似乎无法通过将第二个值设置为“ unlimited”来将maxfiles设置为unlimited。有什么想法吗?
user200857

7

以下应解决最常见的问题(并按其层次结构顺序列出):

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. AFAIK,您不能再在OS X下将限制设置为“无限”
  3. launchctl maxfile受sysctl maxfile限制,因此不能超过它们
  4. sysctl似乎从launchctl maxfiles继承了kern.maxfilesperproc
  5. 默认情况下,ulimit似乎从launchctl继承了它的“打开文件”值
  6. 您可以在/ etc / profile或〜/ .profile中设置自定义ulimit;虽然这不是必需的,但我提供了一个示例
  7. 与默认值相比,将这些值中的任何一个设置为非常高的值时都必须谨慎-这些功能具有稳定性/安全性。我已经将这些我认为是合理的示例数字写在其他网站上。

0

简单来说:

  • ulimit命令提供“对外壳程序可用的资源及其创建的进程的控制”(请参阅​​:help ulimitman bash)。分配给外壳的资源受系统资源限制的限制。

  • launchctl当前的工艺控制系统最大的资源消耗(见:man setrlimitman launchctl)。最大值受内核限制的限制。

  • sysctl控制器内核限制(见:man sysctlBSD的调整内核限制)。

要增加限制,可以根据问题使用每个命令。

另请参阅:“ launchctl limit”和“ ulimit”之间是什么关系?


对于打开文件过多的问题,这取决于已达到确切的软限制或硬限制(是本地shell脚本,由root,应用运行的全局脚本还是同时运行所有进程)。值得增加所有限制(shell,启动和内核限制)。

要持续增加限制,请参阅:如何持续控制Mac上的最大系统资源消耗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.