IMAP NIO

Revision as of 20:01, 7 December 2012 by Gayle (talk | contribs) (Created page with "NIO implementation helps reduce the mailboxd memory footprint with a small CPU overhead. NIO eliminates the need of 1 (IMAP connection)-to-1 (server thread) mapping and helps ...")

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

NIO implementation helps reduce the mailboxd memory footprint with a small CPU overhead. NIO eliminates the need of 1 (IMAP connection)-to-1 (server thread) mapping and helps reduce the memory footprint of the ZCS server. It is useful when there are many concurrent IMAP users. The exact benefit depends on the number of IMAP users/server and number of live connections/users.

The saving is linear to the number of active IMAP connections that are in a single mailbox server.

Example for 10,000 concurrent IMAP accounts:

With NIO: If there are 10,000 IMAP accounts, each of the IMAP accounts has an IMAP client which maintains 3 to 4 connections. There are at most 100 to 200 Java threads required in the mailboxd process to handle requests from those clients. If one thread uses 256k memory, it uses 25 to 50MB Java memory.

Regarding the CPU and depending on the load, the overhead usage can range from 0 to 20%. Since ZCS is not CPU bounded, the CPU increase should not be a significant factor to impact the client side response time.

Without NIO: If there are 10,000 IMAP accounts, each of the IMAP accounts has an IMAP client which maintains 3 to 4 connections. There are 10,000*3 or 10,000*4 Java threads required in the mailboxd process to handle requests from those clients. If one thread uses 256k memory, it uses 7,500MB to 10,000MB of Java memory.

Enabling NIO and Trace Logging

NIO implementation is enabled by default, with the setting of True. If you want to disable NIO, change the zmlocalconfig attribute nio_imap_enabled to False.

Trace logging can be enabled for NIO for basic troubleshooting purposes. Enable Trace logging at the account level with zmprov aal account zimbra.imap trace.

Jump to: navigation, search