How to properly increase a `ulimit -n` limits?

I'm trying to download the X-Plane 10 Demo through uTorrent, however I get a "too many open files" error all the time. I can do the alternate download (which takes forever and a day), but I wonder how I can increase the setting in Lion?

I found conflicting information about it, some say that ulimit -n and sysctl are the tools of choice, while others report that launchctl is correct.

The reported value for ulimit -n is 256, same for launchctl limit:

cpu         unlimited      unlimited      
filesize    unlimited      unlimited      
data        unlimited      unlimited      
stack       8388608        67104768       
core        0              unlimited      
rss         unlimited      unlimited      
memlock     unlimited      unlimited      
maxproc     709            1064           
maxfiles    256            unlimited      

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:

  1. You will need to restart for these changes to take effect.
  2. AFAIK you can no longer set limits to 'unlimited' under OS X
  3. launchctl maxfiles are bounded by sysctl maxfiles, and therefore cannot exceed them
  4. sysctl seems to inherit kern.maxfilesperproc from launchctl maxfiles
  5. ulimit seems to inherit it's 'open files' value from launchctl by default
  6. you can set a custom ulimit within /etc/profile, or ~/.profile ; while this isn't required I've provided an example
  7. 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.
  8. When launchctl limits are lower than the sysctl ones, there have been reports that the relevent sysctl ones will be bumped up automatically to meet the requirements.

Basically ulimit controls resources available to the shell and its processes, where launchctl controls maximum resources to the system and its processes.

For the current shell, limit of maximum open files can be changed by: ulimit -n 10240.

Note: You can use extra -S parameter for a soft or -H for the hard limit.

If shell limit cannot be changed, then you need to use the launchctl command first, e.g.

sudo launchctl limit maxfiles 10240 unlimited

To change the kernel limits, run: sudo sysctl -w kern.maxfiles=10240.

Further reading:

  • Which command controls the open file limits?
  • How to persistently control maximum system resource consumption on Mac?
  • How to add persist shell ulimit settings on Mac?

You could increase the maximum opened files by running ulimit -n 1024 and launching uTorrent from the command line. In my case, I would launch Transmission using the command :

/Applications/Transmission.app/Contents/MacOS/Transmission

You must launch the torrent application from the shell where you invoked ulimit, your changes have no effect otherwise, well isolating the changes is the advantage of ulimit.