Performance tuning¶
Disk I/O optimization¶
Usually heavily loaded IMAP and POP3 servers don’t use much CPU, but they use all the disk I/O they can get. So reducing disk I/O is probably the most useful optimization you can do.
See Mbox Mailbox Format for mbox-specific optimizations.
See Maildir Mailbox Format for Maildir-specific optimizations.
See dbox Mailbox Format for Dovecot’s own high-performance mailbox format. It usually gives much better performance than mbox/Maildir.
See full text search indexes for optimizing IMAP SEARCH command.
See Dovecot as a POP3 server for POP3 optimizations, especially
pop3_no_flag_updates=yes
mailbox_list_index=yes
can help a lot by replying to IMAP STATUS (and similar) lookups from a single index without having to open each mailbox index separately. This is the default in v2.3+.Also
mailbox_list_index_very_dirty_syncs=yes
makes Dovecot assume that the list index is up-to-date.
mail_prefetch_count
setting may be helpful with some mailbox formatsmail_location
= ...:VOLATILEDIR=/tmp/dovecot-volatile/%2.256Nu/%u
moves e.g. lock files to the volatile directory. This is helpful especially if mail_location otherwise points to a remote filesystem like NFS. (v2.2.32+)If the acl plugin is used, but only global ACLs are needed, set
acl_globals_only=yes
(v2.2.31+)
CPU usage optimization¶
See Login processes for optimizing CPU usage caused by logins
See
auth_cache_size
setting for caching passdb and userdb lookupsTo distribute password hash calculations to multiple CPU cores (via auth-worker processes), set
auth_cache_verify_password_with_worker=yes
. (v2.2.34+)
Services having client_limit>1 and process_limit>1, set process_min_avail to the number of CPU cores.
To reduce forks by reusing existing processes for new requests increase service { service_count } from 1 to higher (e.g. 100) for imap and pop3 services. It’s better not to set it too high or unlimited (0), because different users use different amounts of memory, and it’s wasteful when a lot of processes end up having a lot of “free” memory.
Memory usage optimization¶
There aren’t many settings which affect Dovecot’s memory usage. In general Dovecot uses as much memory as it needs, which is usually quite little.
auth_cache_size
controls maximum memory size for caching passdb/userdb lookupsimap_hibernate_timeout
controls when to move IDLEing IMAP connections to wait for changes in a shared imap-hibernate process. This frees up the imap process.
Note that these settings do not directly affect the memory usage:
service { vsz_limit }: These are simply safe guards against potential memory leaks. If the process’s virtual size reaches the limit, the process is killed by the kernel.
service { process_limit } and service { client_limit }: These are mostly to avoid DoS attacks using up all your memory.