[Dovecot] How do I increase the fd limit on OS X?
Bill Cole
dovecot-20061108 at billmail.scconsult.com
Thu May 8 17:09:10 EEST 2008
At 1:17 PM -0700 5/7/08, Rob Frohne imposed structure on a stream of
electrons, yielding:
>Hi All,
>
>I just upgraded to the new 1.1rc5 from 1.0 that I had been using and it
>advised me to increase the file descriptor limit. I'm not sure how to
>do this. There is a command built into tcsh that allows me to do this
>called limit, but sudo limit 4224 doesn't work,
The tcsh builtin 'limit' only changes the limit for the currently
running instance of tcsh and its children, so even if running a
command via sudo ran a shell (it doesn't) and your root shell were
tcsh (which it would not be on any recent MacOS X) the 'limit'
command would only apply until that to that shell exited (i.e.
microseconds)
Assuming that you are using MacOS X 10.3 or later, you should be able
to fix your problem by putting these lines into /etc/sysctl.conf and
rebooting:
kern.maxfiles=65534
kern.maxfilesperproc=8192
Note that those two numbers are not necessarily ideal for your
system, but unless you are on a very small machine they should not
cause trouble. You can set these on a live system with:
sudo sysctl -w kern.maxfiles=65534 kern.maxfilesperproc=8192
However, there's a reasonably good chance that Dovecot won't try to
adjust to those limits changing at runtime, so you'll probably have
to at least restart it. It is also possible that Dovecot does not
itself even try to adjust the soft limit at startup time, which would
mean that you would need to work with whatever starts it up to hand
it a reasonable soft limit. See below...
>and usually dovecot is
>started from the rc.local file if I recall right, and I'm not sure how
>to set this up from there. Any advice.
In fact it is a bit unusual to find a rc.local script on a MacOS
machine, because MacOS uses its own unique system startup and daemon
control mechanisms. Not that rc.local does not work, it just doesn't
usually exist because of the slicker ways to start things. The older
"SystemStarter" system uses structured subdirectories under
/Library/StartupItems for add-on software like Dovecot, while the
newer "launchd" uses parameter lists in /Library/LaunchDaemons/.
How Dovecot is started on your system, which is both a function of
version and of how Dovecot was originally set up, determines how you
would set the soft limit it is started with. If you are actually
using rc.local or SystemStarter, the startup is being done through a
shell (sh, NOT tcsh) script, and the line you'd need to add (either
to /etc/rc.local or /Library/StartupItems/Dovecot/Dovecot) ahead of
the start of Dovecot is:
ulimit -n 4224
If you are running Tiger or Leopard, you are likely to be using
launchd, have a plist that looks a bit like the one at
http://wiki.dovecot.org/LaunchdInstall, and you will need to add a
new key as a member of the overall <dict> structure:
<key>SoftResourceLimits</key>
<dict>
<key>NumberOfFiles</key>
<integer>4224</integer>
</dict>
That plist file will be in /Library/LaunchDaemons and should be named
dovecot.plist, org.dovecot.plist, or (strictly matching the Apple
naming convention and looking goofy) org.dovecot.dovecot.plist.
--
Bill Cole
bill at scconsult.com
More information about the dovecot
mailing list