OS X(10.5)上指定的默认 ulimit 在哪里?

OS X(10.5)上指定的默认 ulimit 在哪里?

目前,OS X 用户帐户的默认nofile限制似乎约为 256 个文件描述符。我正在尝试测试一些需要同时打开比这多得多的连接数的软件。

在运行 pam 限制模块的典型 Debian 机器上,我会进行编辑/etc/security/limits.conf以便为将要运行该软件的用户设置更高的限制,但我不知道在 OS X 中应该在哪里设置这些限制。

有没有 GUI 可以用于它?有没有配置文件可以用于它?在 OS X 上更改默认 ulimits 的最简洁方法是什么?

答案1

在 Leopard 下,初始进程是launchd。每个进程的默认 ulimit 都继承自launchd。作为参考,默认(编译时)限制是

$ sudo launchctl limit
    cpu         unlimited      unlimited      
    filesize    unlimited      unlimited      
    data        6291456        unlimited      
    stack       8388608        67104768       
    core        0              unlimited      
    rss         unlimited      unlimited      
    memlock     unlimited      unlimited      
    maxproc     266            532            
    maxfiles    256            unlimited

要更改任何这些限制,请将一行(您可能需要先创建文件)添加到/etc/launchd.conf,参数与传递给命令的参数相同launchctl。例如

echo "limit maxfiles 1024 unlimited" | sudo tee -a /etc/launchd.conf

但是launchd已经启动了您的登录 shell,因此使这些更改生效的最简单方法是重新启动我们的机器。(使用 >> 附加到 /etc/launchd.conf。)

答案2

Shell 限制

可以通过命令更改 shell 和进程可用的资源ulimit,这些命令可以添加到启动脚本中,例如~/.bashrc~/.bash_profile针对个人用户或者/etc/bashrc对于所有用户. 要添加的示例行:

ulimit -Sn 4096 && ulimit -Sl unlimited

请参阅:help ulimitman bash了解更多信息。

系统限制

一般来说,系统限制由以下因素控制:已启动框架,可以通过命令更改launchctl,例如

launchctl limit maxfiles 10240 unlimited

为了使更改持久化,您需要在特定的启动合规文件夹它充当启动代理。

以下是创建此类启动文件的示例命令:

sudo /usr/libexec/PlistBuddy /Library/LaunchAgents/com.launchd.maxfiles.plist -c "add Label string com.launchd.maxfiles" -c "add ProgramArguments array" -c "add ProgramArguments: string launchctl" -c "add ProgramArguments: string limit" -c "add ProgramArguments: string maxfiles" -c "add ProgramArguments: string 10240" -c "add ProgramArguments: string unlimited" -c "add RunAtLoad bool true"

该文件将在系统启动时加载,但是,需要手动加载运行:

sudo launchctl load /Library/LaunchAgents/com.launchd.maxfiles.plist

要验证当前限制,请运行:launchctl limit

看:创建启动守护进程和代理

内核限制

  • 内核限制由命令控制sysctl
  • 要查看当前内核限制,请运行:sysctl -a | grep ^kern.max
  • 要更改允许打开的最大文件数量,请运行:sudo sysctl -w kern.maxfiles=20480
  • 为了使更改持久,请使用类似上述方法在系统启动文件夹中创建属性列表文件。

有关的:


已弃用的方法

在早期版本的 macOS 中,您可以/etc/sysctl.conf像在 Unix 上一样在系统范围内设置这些限制,但是,似乎不支持。

使用~/.launchd.conf/etc/launchd.conf似乎它也不受任何现有版本的 macOS 的支持。维基百科

与启动文件相同/etc/rc.local,它不支持 macOS。

答案3

sudo echo "limit maxfiles 1024 unlimited" >> /etc/launchd.conf

不起作用,因为 sudo 放在了错误的位置,请尝试这个:

echo 'limit maxfiles 10000 unlimited' | sudo tee -a /etc/launchd.conf

答案4

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

现在我必须找出为什么存在两种检查/设置限制的方法......


好吧 - 看起来像是ulimitsysctl给人一种假阳性的感觉,以为他们确实做了一些事情 - 但实际上他们似乎无用。有人可以证实这一点吗?


好的,我开始明白了。从 v10.4 开始,不再有init进程,它已被替换launchd,它也以 PID 1 运行。

% ps -fu root
  UID   PID  PPID   C     STIME TTY           TIME CMD
    0     1     0   0   0:30.72 ??         0:46.72 /sbin/launchd

当然值得一提的是它ulimit是一个shell内置的,launchctl是一个独立于shell的程序。

相关内容