Answers:
使用ulimit
命令仅更改当前外壳及其子外壳的资源限制,并sudo ulimit
创建根外壳,调整其限制,然后退出(据我所知,这没有任何实际作用)。
要超过12288,您需要调整内核的参数kern.maxfiles
和kern.maxfilesperproc
参数,并且(至少根据此博客文章的内容,这是本次讨论的摘要)还需要调整启动限制。您可以使用launchctl limit
一次调整所有这些:
sudo launchctl limit maxfiles 1000000 1000000
要使其永久(即重新启动时不重置),请创建/etc/launchd.conf
包含:
limit maxfiles 1000000 1000000
然后,您可以使用ulimit
(但不使用sudo
)调整流程限制。
sudo launchctl limit maxfiles 1000000 unlimited
“ maxfiles”的硬性限制或软性限制都不是无限的。请同时使用数字参数。
launchd.conf
。我认为如果数量太少,可能会使您的计算机无法使用。例如,我曾经使用过,limit maxfiles 1024 1024
并且很难将其改回。
以下应解决大多数解决方案(并按其层次结构顺序列出):
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
笔记:
似乎有一种完全不同的方法可以更改每个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
似乎OS X Lion不允许将“ unlimited”作为值:
% sudo launchctl limit maxfiles 8192 unlimited
Neither the hard nor soft limit for "maxfiles" can be unlimited. Please use a numeric parameter for both.
提供软限制和硬限制的数值可以完成以下工作:
% sudo launchctl limit maxfiles 4096 8192
-1
用作值会导致12288
。可以使用较大的数值,例如sudo launchctl limit maxfiles 15000 150000
。不过,我不确定这些设置是否会起作用。
在小牛队上很简单。作为普通用户:
ulimit -n 8192
您可以通过以下方式检查更新的设置
ulimit -a
在我的机器上:
ulimit -a
-t: cpu time (seconds) unlimited
-f: file size (blocks) unlimited
-d: data seg size (kbytes) unlimited
-s: stack size (kbytes) 8192
-c: core file size (blocks) 0
-v: address space (kbytes) unlimited
-l: locked-in-memory size (kbytes) unlimited
-u: processes 709
-n: file descriptors 8192
echo limit maxfiles 10000 10000|sudo tee -a /etc/launchd.conf
然后重新启动计算机
在OS X 10.13.6上,这对我有效:
$ sysctl kern.maxfiles
kern.maxfiles: 12288
$ sysctl kern.maxfilesperproc
kern.maxfilesperproc: 10240
$ sudo sysctl -w kern.maxfiles=1048600
kern.maxfiles: 12288 -> 1048600
$ sudo sysctl -w kern.maxfilesperproc=1048576
kern.maxfilesperproc: 10240 -> 1048576
$ ulimit -S -n
256
$ ulimit -S -n 1048576
$ ulimit -S -n
1048576
不能通过更改某些限制ulimit
,因为它们仅适用于当前shell,因此launchctl
应使用command全局更改限制,例如
sudo launchctl limit maxfiles 100000 unlimited
请注意,/etc/launchd.conf
在最新的macOS版本中,不再支持将这些限制应用于(如其他答案中所建议的)。虽然仍然可以使用launchd.plist
(见man launchd.plist
),如每用户或系统范围内的plist
配置文件,建议在这里,那里,并在那里。
要使这些限制持续存在,您可以使用/etc/sysctl.conf
file并添加例如:
kern.maxprocperuid=1000
kern.maxproc=2000
kern.maxfilesperproc=20000
kern.maxfiles=50000
为了使更改生效,需要重新启动。
要查看当前限制,请运行:launchctl limit
或sysctl -a | grep ^kern.max
。
另请参阅:如何在macOS中保留ulimit设置?