Skip to content

Instantly share code, notes, and snippets.

@tombigel
Forked from a2ikm/limit.maxfiles.plist
Last active March 19, 2024 07:01
Star You must be signed in to star a gist
Save tombigel/d503800a282fcadbee14b537735d202c to your computer and use it in GitHub Desktop.
How to Change Open Files Limit on OS X and macOS Sierra (10.8 - 10.12)

How to Change Open Files Limit on OS X and macOS

This text is the section about OS X Yosemite (which also works for macOS Sierra) from https://docs.basho.com/riak/kv/2.1.4/using/performance/open-files-limit/#mac-os-x

The last time i visited this link it was dead (403), so I cloned it here from the latest snapshot in Archive.org's Wayback Machine https://web.archive.org/web/20170523131633/https://docs.basho.com/riak/kv/2.1.4/using/performance/open-files-limit/

Mac OS X

To check the current limits on your Mac OS X system, run:

launchctl limit maxfiles

The last two columns are the soft and hard limits, respectively.

Adjusting Open File Limits in Yosemite

To adjust open files limits on a system-wide basis in Mac OS X Yosemite, you must create two configuration files. The first is a property list (aka plist) file in /Library/LaunchDaemons/limit.maxfiles.plist that contains the following XML configuration:

<?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>200000</string>
          <string>200000</string>
        </array>
      <key>RunAtLoad</key>
        <true/>
      <key>ServiceIPC</key>
        <false/>
    </dict>
  </plist>

This will set the open files limit to 200000. The second plist configuration file should be stored in /Library/LaunchDaemons/limit.maxproc.plist with the following contents:

<?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.maxproc</string>
      <key>ProgramArguments</key>
        <array>
          <string>launchctl</string>
          <string>limit</string>
          <string>maxproc</string>
          <string>2048</string>
          <string>2048</string>
        </array>
      <key>RunAtLoad</key>
        <true />
      <key>ServiceIPC</key>
        <false />
    </dict>
  </plist>

Both plist files must be owned by root:wheel and have permissions -rw-r--r--. This permissions should be in place by default, but you can ensure that they are in place by running sudo chmod 644 . While the steps explained above will cause system-wide open file limits to be correctly set upon restart, you can apply them manually by running launchctl limit.

In addition to setting these limits at the system level, we recommend setting the at the session level as well by appending the following lines to your bashrc, bashprofile, or analogous file:

ulimit -n 200000
ulimit -u 2048

Like the plist files, your bashrc or similar file should have -rw-r--r-- permissions. At this point, you can restart your computer and enter ulimit -n into your terminal. If your system is configured correctly, you should see that maxfiles has been set to 200000.

<?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>524288</string>
<string>524288</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</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.maxproc</string>
<key>ProgramArguments</key>
<array>
<string>launchctl</string>
<string>limit</string>
<string>maxproc</string>
<string>2048</string>
<string>2048</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
#!/bin/sh
# These are the original gist links, linking to my gists now.
# curl -O https://gist.githubusercontent.com/a2ikm/761c2ab02b7b3935679e55af5d81786a/raw/ab644cb92f216c019a2f032bbf25e258b01d87f9/limit.maxfiles.plist
# curl -O https://gist.githubusercontent.com/a2ikm/761c2ab02b7b3935679e55af5d81786a/raw/ab644cb92f216c019a2f032bbf25e258b01d87f9/limit.maxproc.plist
curl -O https://gist.githubusercontent.com/tombigel/d503800a282fcadbee14b537735d202c/raw/ed73cacf82906fdde59976a0c8248cce8b44f906/limit.maxfiles.plist
curl -O https://gist.githubusercontent.com/tombigel/d503800a282fcadbee14b537735d202c/raw/ed73cacf82906fdde59976a0c8248cce8b44f906/limit.maxproc.plist
sudo mv limit.maxfiles.plist /Library/LaunchDaemons
sudo mv limit.maxproc.plist /Library/LaunchDaemons
sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
sudo chown root:wheel /Library/LaunchDaemons/limit.maxproc.plist
sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
sudo launchctl load -w /Library/LaunchDaemons/limit.maxproc.plist
@pluone
Copy link

pluone commented Nov 13, 2022

1048576

really helpful, when add 'sudo' it works after reboot.

@massisenergy
Copy link

On MacOS 13, sudo launchctl limit maxfiles 1048576.
But how can I make the change persist?

@RoxyFarhad
Copy link

Having this issue as well on MacOS 12.5.0 -- no matter how high I set the limit on maxfiles, I still get the same error trying to run a docker container.

@andy-clapson
Copy link

On MacOS 13, sudo launchctl limit maxfiles 1048576.
But how can I make the change persist?

This does indeed work, but it won't 'stick', so the most effective way is to add it to your .zshrc file.

Something like this:

echo "sudo launchctl limit maxfiles 1048576" >> ~/.zshrc

@9999years
Copy link

It appears that macOS 13.5 has broken this. Now (sometimes?), running sudo launchctl limit maxfiles 524288 fails with Could not set resource limits: 150: Operation not permitted while System Integrity Protection is engaged.

I've had a little bit better luck by explicitly setting the hard limit to unlimited with sudo launchctl limit maxfiles 524288 unlimited, but it doesn't seem to be super consistent and running launchctl limit maxfiles afterwards often shows that the limits are entirely unchanged, even if no error message was printed.

@CyberCr33p
Copy link

CyberCr33p commented Aug 9, 2023

I've had a little bit better luck by explicitly setting the hard limit to unlimited with sudo launchctl limit maxfiles 524288 unlimited, but it doesn't seem to be super consistent and running launchctl limit maxfiles afterwards often shows that the limits are entirely unchanged, even if no error message was printed.

I have the same issue. sudo launchctl limit maxfiles 524288 unlimited doesn't even temporary fix it. Did you found any solution?

@tklinchik
Copy link

tklinchik commented Aug 11, 2023

Having the same issue after last Monterey update to 12.6.8. I think the issue might be unlimited keyword no longer supported or intentionally disallowed.

As per [this post] this seems to have done a trick for me(https://superuser.com/questions/1634286/how-do-i-increase-the-max-open-files-in-macos-big-sur):

sudo launchctl limit maxfiles 9000000 9999999
ulimit -Sn 9000000

@tillydray
Copy link

From the url @tklinchik posted, this answer worked for me on 13.6

sudo sysctl kern.maxfiles=64000 kern.maxfilesperproc=28000

@redeemefy
Copy link

Anyone with Mac Sonoma 14.1.1 with a solution?

@viquu
Copy link

viquu commented Jan 8, 2024

Anyone with Mac Sonoma 14.1.1 with a solution?

I have same problem on sonoma 14.1.1, but I don't know how to solve it.

@Quiark
Copy link

Quiark commented Jan 25, 2024

One funny thing I found is that having ulimit in your profile, .config, fish rc etc files can work against you - if you set a relatively low limit there (I had 1024), any subsequent attempt to increase will fail.

@MDSADABWASIM
Copy link

I'm still looking for a proper solution for Sonoma.

@bingoup886
Copy link

I'm still looking for a proper solution for Sonoma.

me too,any update?

@MDSADABWASIM
Copy link

me too,any update?

No, still looking for a proper solution.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment