How*_*ard 86 osx sysctl ulimit
在小牛队之前,我可以使用/etc/launchd.conf
文件来改变最大系统资源消耗,例如:
limit maxfiles 16384 unlimited
limit maxproc 16384 unlimited
Run Code Online (Sandbox Code Playgroud)
它不再适用于小牛队。
在最新版本的 OS X 中,正确的做法是什么?
小智 92
通过设置的限制ulimit
仅影响当前 shell 会话创建的进程。
root
(管理员)通过执行系统配置命令或修改系统配置文件来提高。在您终止 shell 会话(通过Ctrl+ D、exit
或关闭Terminal.app
窗口等)后,设置将消失。如果您希望在下一个 shell 会话中使用相同的设置,请将设置添加到 shell 启动脚本中。
注意:如果您使用的是bash
,那么它应该是~/.bash_proile
或~/.bash_login
。如果您使用其他外壳,它可能应该是~/.profile
.
您必须在/Library/LaunchDaemons/limit.maxfiles.plist
(owner: root:wheel
, mode: 0644
)创建一个文件:
<?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>262144</string>
<string>524288</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
您应该根据需要更改数字。它们分别是“软限制”(262144
)和“硬限制”(524288
)。有关更多信息,请通过运行查阅手册页man launchd.plist
。
您可以将以下几行添加到/etc/sysctl.conf
(owner: root:wheel
, mode: 0644
):
kern.maxfiles=524288
kern.maxfilesperproc=262144
Run Code Online (Sandbox Code Playgroud)
您应该根据需要更改数字。它们分别是“系统范围限制” ( kern.maxfiles
) 和“每个进程限制” ( kern.maxfilesperproc
)。如需更多设置,请通过运行查阅手册页man sysctl
,或阅读 处的源代码/usr/include/sys/sysctl.h
。
您可以在/etc/launchd.conf
(owner: root:wheel
, mode: 0644
) 中添加以下行:
limit maxfiles 262144 524288
Run Code Online (Sandbox Code Playgroud)
您应该根据需要更改数字。它们分别是“软限制”(262144
)和“硬限制”(524288
)。
系统不允许您设置高于“硬最大值”(由 Apple 提出)的值。要增加这个“硬最大值”,您必须从“App Store”购买“OS X Server”,然后您必须执行以下命令一次:
sudo serverinfo --setperfmode true
Run Code Online (Sandbox Code Playgroud)
这会在您的机器上激活“服务器性能模式”。然后,您可以根据机器的配置设置最大值(请参阅此处)。我之前尝试过这个(在 Mountain 和 Mavericks 上)并且它有效!请参阅我的帖子(此处)了解更多信息。
Kiw*_*iwy 11
似乎创建文件/etc/launchd.conf
并将您的命令放入其中应该可以解决问题。
如果它不起作用,您可能可以编辑或创建该 /etc/rc.local
文件并将您的命令添加到其中,因为 Apple 几乎不可能在命令行上删除对限制的支持。
编辑 1:
我应该从那个开始,launchd
手册页 引用了以下文件:
~/Library/LaunchAgents Per-user agents provided by the user.
/Library/LaunchAgents Per-user agents provided by the administrator.
/Library/LaunchDaemons System-wide daemons provided by the administrator.
/System/Library/LaunchAgents Per-user agents provided by Mac OS X.
/System/Library/LaunchDaemons System-wide daemons provided by Mac OS X.
Run Code Online (Sandbox Code Playgroud)
我敢打赌,您现在需要将命令~/Library/LaunchAgents
放入/Library/LaunchDaemons
.
你应该两个都试试。
编辑2:
还要注意launchd需要xml文件而不仅仅是脚本。一个 gui 已经被设计来帮助完成这样的任务,一个不自由的人是Lingon。也许还有其他免费产品。
小智 9
我只是在我的.bash_profile
作品中添加了这两行,就像一个魅力
ulimit -n 1024
ulimit -u 1024
Run Code Online (Sandbox Code Playgroud)
最近的 macOS 不再支持更改限制/etc/launchd.conf
或/etc/rc.local
不再支持。请参阅:旧系统和技术。
相反,您应该创建一个新的启动代理。
这是使用PlistBuddy
命令的命令示例(请参阅:)man PlistBuddy
:
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"
Run Code Online (Sandbox Code Playgroud)
和maxproc
极限类似:
sudo /usr/libexec/PlistBuddy /Library/LaunchAgents/com.launchd.maxproc.plist \
-c "add Label string com.launchd.maxproc" \
-c "add ProgramArguments array" \
-c "add ProgramArguments: string launchctl" \
-c "add ProgramArguments: string limit" \
-c "add ProgramArguments: string maxproc" \
-c "add ProgramArguments: string 2000" \
-c "add ProgramArguments: string unlimited" \
-c "add RunAtLoad bool true"
Run Code Online (Sandbox Code Playgroud)
要装入上述文件,运行:sudo launchctl load /Library/LaunchAgents/com.launchd.*.plist
。
笔记:
cat
或PlistBuddy -x -c Print /Library/LaunchAgents/com.launchd.maxfiles.plist
。tail -f /var/log/system.log
。launchd
的限制,运行:launchctl limit
。.plist
文件可以放置在每个用户或系统范围的代理文件夹 ( LaunchAgents
) 中。有关更多详细信息,请参阅:man launchd
和man launchd.plist
,或这个或那个答案。请注意,上述Launchd系统限制仍受内核限制,因此您不能将它们设置为高于内核状态变量中设置的实际限制(参见:man sysctl
帮助)。
要查看当前的内核限制,运行:sysctl -a | grep ^kern.max
。
为了增加maxfiles
限制,请运行:sudo sysctl -w kern.maxfiles=20480
。
为了让它们持久化,使用类似的方法创建一个启动.plist
文件,例如
sudo /usr/libexec/PlistBuddy /Library/LaunchAgents/com.kern.maxfiles.plist \
-c "add Label string com.kern.maxfiles" \
-c "add ProgramArguments array" \
-c "add ProgramArguments: string sysctl" \
-c "add ProgramArguments: string -w" \
-c "add ProgramArguments: string kern.maxfiles=20480" \
-c "add RunAtLoad bool true"
Run Code Online (Sandbox Code Playgroud)
对于shell限制,添加相关ulimit
命令到~/.bashrc
或~/.bash_profile
启动文件为个人用户,或者/etc/bashrc
为所有用户。请参阅:如何在 Mac 上添加持久外壳 ulimit 设置?
建议添加的行:
# Changes the ulimit limits.
ulimit -Sn 4096 # Increase open files.
ulimit -Sl unlimited # Increase max locked memory.
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
112777 次 |
最近记录: |