OSX has a ridiculously low limit on the maximum number of open files. If you use OSX to develop Node applications -- or even if you just use Node tools like grunt or gulp -- you've no doubt run into this issue.
To address this, I have this line in my $HOME/.bash_profile
:
ulimit -n 1000000 unlimited
And a corresponding entry in /etc/launchd.conf
:
limit maxfiles 1000000
That solved the problem until I upgraded to OSX Yosemite, after which I began seeing the following error every time I opened a terminal window:
bash: ulimit: open files: cannot modify limit: Invalid argument
Oy.
Luckily, I a little Google foo yielded this Superuser post (and answer).
So it was a quick fix:
$ echo kern.maxfiles=65536 | sudo tee -a /etc/sysctl.conf
$ echo kern.maxfilesperproc=65536 | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -w kern.maxfiles=65536
$ sudo sysctl -w kern.maxfilesperproc=65536
$ ulimit -n 65536 65536
Then I updated my $HOME/.bash_profile
to change the ulimit
directive to match that last command, above, and I was back in business.
Hi, I need to increase maxfiles to use in an application that is not run from the shell. I wrote the sysctl.conf file, but it does not work on its own. Is there somewhere else I can place ulimit so that it will work? The previous solution you mentioned worked fine for me (I had a launchd.conf and a rc.local).
Thanks!
You may need to reboot for the changes to take effect. That’s all I know! Good luck!
No luck with reboot. Maxfiles are not updated when I look at launchctl maxfiles, even though the sysctl.conf is rewritten. Thanks anyway though!
@RZ did you create a new launchd.conf with the correct changes in it? This is the file that controls maxfiles for non shell apps I believe. It’s omitted from the Yosemite instructions but I think is still required. Let us know if that works.
Something I noticed is that even for a minor update (like 10.10.1 that I got today) both sysctl.conf and launchd.conf are wiped completely.
@Pat, I thought I had solved the issue using the instructions on this website: http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/#Mac-OS-X
It says the file limit has been changed when I query it in terminal, but my application I’m trying to run does not actually reflect these “system wide” changes. I also have a sysctl.conf file with the “kern.” info. But I do not currently have a launchd.conf. I will give that a shot and see if it helps. Although if I have a LaunchDaemon to do this already, I’m not sure if the launch.conf file is necessary.
Is it possible that specific applications do not use the system-wide changes? And if so, is there a script I could add to the program to allow it to accept the changes, or to change it only for the launch of the application?
Thanks again!
you need to put a “-a” (append) option to your 2nd tee command above or it overwrites the previous entry, should be:
$echo kern.maxfiles=65536 | sudo tee /etc/sysctl.conf
$ echo kern.maxfilesperproc=65536 | sudo tee -a /etc/sysctl.conf
Good catch Kevin. Thanks. Updated the post (and put “-a” on both — maybe the file already exists).