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

arc*_*lus 28 mac-osx ulimit

现在nofileOS X 用户帐户的默认限制似乎是大约 256 个文件描述符。我正在尝试测试一些需要比一次打开更多连接的软件。

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

是否有适合它的 GUI?某处是否有配置文件?在 OS X 上更改默认 ulimit 的最简洁方法是什么?

Dav*_*ney 28

在 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
Run Code Online (Sandbox Code Playgroud)

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

echo "limit maxfiles 1024 unlimited" | sudo tee -a /etc/launchd.conf
Run Code Online (Sandbox Code Playgroud)

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

  • 伙计,如果这个 _was_ 记录在任何地方,这个页面就不需要了 (7认同)
  • 您能否为此添加指向官方文档的链接? (2认同)
  • 小更正:您正在 sudo 下运行 `echo`,但试图将您的非特权 shell 附加到文件中,而它无权这样做。试试`echo "limit maxfiles 1024 unlimited" | sudo tee -a /etc/launchd.conf` 代替。 (2认同)

ken*_*orb 6

壳牌限制

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

ulimit -Sn 4096 && ulimit -Sl unlimited
Run Code Online (Sandbox Code Playgroud)

请参阅:help ulimit以及man bash更多信息。

系统限制

通常,系统限制由Launchd框架控制,可以通过launchctl命令更改,例如

launchctl limit maxfiles 10240 unlimited
Run Code Online (Sandbox Code Playgroud)

要使更改持久化,您需要在用作启动代理的特定Launch 兼容文件夹中创建属性列表文件。

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

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
Run Code Online (Sandbox Code Playgroud)

要验证当前的限制,运行: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 不支持。