3

如果我使用's命令查看maxfiles选项(在我的 OS X El Cap 机器上)launchctllimit

$ launchctl limit
    cpu         unlimited      unlimited      
    filesize    unlimited      unlimited      
    data        unlimited      unlimited      
    stack       8388608        67104768       
    core        0              unlimited      
    rss         unlimited      unlimited      
    memlock     unlimited      unlimited      
    maxproc     709            1064           
    maxfiles    256            unlimited

似乎有 256 的软限制和“无限制”的硬限制。我想将软限制更改为类似2048,并保持硬限制不变。当我查看limit的论点时

$ launchctl help limit
Usage: launchctl limit [<limit-name> [<both-limits> | <soft-limit> <hard-limit>]

看来我可以为同一事物设置两个限制,或者为软和硬设置一个值。但是,如果我尝试设置无限制的硬限制。

$ sudo launchctl limit maxfiles 2048 unlimited

我最终得到了 10240 的奇怪值

$ launchctl limit
    cpu         unlimited      unlimited      
    filesize    unlimited      unlimited      
    data        unlimited      unlimited      
    stack       8388608        67104768       
    core        0              unlimited      
    rss         unlimited      unlimited      
    memlock     unlimited      unlimited      
    maxproc     709            1064           
    maxfiles    2048           10240          

这里发生了什么?是否可以设置无限的值?如果不是,那是launchctl limit命令的限制,还是系统级别的限制?如果是后者,那么所有这些unlimited报告的初始值是多少?还是这个苹果就是苹果?

对于奖励积分 - 有谁知道为什么这个限制首先设置得如此之低?

4

2 回答 2

3

手册页中setrlimit()launchd,实现此功能所依赖的底层系统调用:

setrlimit()现在在历史上成功的地方返回errnoset to EINVAL。它不再接受 " rlim_cur = RLIM_INFINITY" 为RLIM_NOFILE. 使用“ rlim_cur = min(OPEN_MAX, rlim_max)”。

因此,虽然getrlimit()可能(最初)报告硬限制是RLIM_INFINITY,但实际上是OPEN_MAX(10240) 因为这只是内核实现方式所施加的限制。如果您尝试设置限制,则需要使用后一个值,这会影响从那时起报告的内容。

至于为什么RLIM_NOFILE默认的软限制为 256,这是因为对于绝大多数进程来说,这不是一个实际的约束。他们相处得很好,没有接近这个限制。并且保持该值“如此低”意味着每个进程在内存方面的成本较低,并且每个进程fork()将文件描述符复制到新的子进程等方面的工作更少。

知道他们可能会处理更多文件的程序可以使用setrlimit().

于 2017-03-11T22:07:24.820 回答
2

没有推测为什么,苹果在优胜美地改变了这些。通过 launchctl limit ... 所做的任何更改仅对您当前的登录名是临时的。重新登录或重新启动,它们会立即回到 Apple 设置的默认值。

我可以确认他们在 10.12.4 b4 之前还没有改变这种行为。

当苹果是苹果的时候,这是一个令人不快的消化。我在开发人员文档中进行了深入研究,但找不到他们做出更改的原因的解释。

于 2017-03-11T20:35:11.553 回答