Increase the maximum number of open file descriptors in Snow Leopard?
Using ulimit
command only changes the resource limits for the current shell and its children and sudo ulimit
creates a root shell, adjusts its limits, and then exits (thus having, as far as I can see, no real effect).
To exceed 12288, you need to adjust the kernel's kern.maxfiles
and kern.maxfilesperproc
parameters, and also (at least according to this blog entry, which is a summary of this discussion) a launchd limit. You can use launchctl limit
to adjust all of these at once:
sudo launchctl limit maxfiles 1000000 1000000
To make this permanent (i.e not reset when you reboot), create /etc/launchd.conf
containing:
limit maxfiles 1000000 1000000
Then you can use ulimit
(but without the sudo
) to adjust your process limit.
If this doesn't do it, you may be running into size limits in the kernel. If your model supports it, booting the kernel in 64-bit mode may help.
The following should resolve most solutions (and are listed in order of their hierarchy):
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
Notes:
- You will need to restart for these changes to take effect.
- AFAIK you can no longer set limits to 'unlimited' under OS X
- launchctl maxfiles are bounded by sysctl maxfiles, and therefore cannot exceed them
- sysctl seems to inherit kern.maxfilesperproc from launchctl maxfiles
- ulimit seems to inherit it's 'open files' value from launchctl by default
- you can set a custom ulimit within /etc/profile, or ~/.profile ; while this isn't required I've provided an example
- Be cautious when setting any of these values to a very high number when compared with their default - the features exist stability/security. I've taken these example numbers that I believe to be reasonable, written on other websites.
It seems like there is an entirely different method for changing the open files limit for each version of OS X!
For OS X Sierra (10.12.X) you need to:
1.
In Library/LaunchDaemons
create a file named limit.maxfiles.plist
and paste the following in (feel free to change the two numbers (which are the soft and hard limits, respectively):
<?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. Change the owner of your new file:
sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
3. Load these new settings:
sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
4. Finally, check that the limits are correct:
launchctl limit maxfiles