summaryrefslogtreecommitdiffstats
path: root/doc/wiki/PerformanceTuning.txt
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 09:51:24 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 09:51:24 +0000
commitf7548d6d28c313cf80e6f3ef89aed16a19815df1 (patch)
treea3f6f2a3f247293bee59ecd28e8cd8ceb6ca064a /doc/wiki/PerformanceTuning.txt
parentInitial commit. (diff)
downloaddovecot-f7548d6d28c313cf80e6f3ef89aed16a19815df1.tar.xz
dovecot-f7548d6d28c313cf80e6f3ef89aed16a19815df1.zip
Adding upstream version 1:2.3.19.1+dfsg1.upstream/1%2.3.19.1+dfsg1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'doc/wiki/PerformanceTuning.txt')
-rw-r--r--doc/wiki/PerformanceTuning.txt69
1 files changed, 69 insertions, 0 deletions
diff --git a/doc/wiki/PerformanceTuning.txt b/doc/wiki/PerformanceTuning.txt
new file mode 100644
index 0000000..80e7fca
--- /dev/null
+++ b/doc/wiki/PerformanceTuning.txt
@@ -0,0 +1,69 @@
+Dovecot 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 <MailLocation.LocalDisk.txt> for generic disk I/O optimizations.
+ * See <MailLocation.Mbox.txt> for mbox-specific optimizations.
+ * See <MailLocation.Maildir.txt> for Maildir-specific optimizations.
+ * See <dbox> [MailboxFormat.dbox.txt] for Dovecot's own high-performance
+ mailbox format. It usually gives much better performance than mbox/Maildir.
+ * See <full text search indexes> [Plugins.FTS.txt] for optimizing IMAP SEARCH
+ command.
+ * See <POP3Server.txt> 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 formats
+ * 'mail_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 acl plugin is used, but only global ACLs are needed, set
+ 'acl_globals_only=yes' (v2.2.31+)
+
+CPU usage optimization
+----------------------
+
+ * See <LoginProcess.txt> for optimizing CPU usage caused by logins
+ * See 'auth_cache_size' setting for caching passdb and userdb lookups
+ * To 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
+ lookups
+ * <High-performance mode for login processes> [LoginProcess.txt].
+ * 'imap_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, client_limit } ': These are mostly to avoid DoS
+ attacks using up all your memory.
+
+(This file was created from the wiki on 2019-06-19 12:42)