IMAP NIO: Difference between revisions

No edit summary
No edit summary
 
Line 1: Line 1:
{{WIP}}{{Article Infobox|{{admin}}|{{ZCS 8.0}}||}}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.
{{BC|Community Sandbox}}
__FORCETOC__
<div class="col-md-12 ibox-content">
=IMAP NIO=
{{KB|{{Unsupported}}|{{ZCS 8.0}}||}}
{{WIP}}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.
The saving is linear to the number of active IMAP connections that are in a single mailbox server.

Latest revision as of 20:23, 11 July 2015

IMAP NIO

   KB 20382        Last updated on 2015-07-11  




0.00
(0 votes)

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:

$ zmlocalconfig -e nio_imap_enabled=false
$ zmmailboxdctl restart

To set to true:

$ zmlocalconfig -e nio_imap_enabled=true
$ zmmailboxdctl restart

Trace logging can be enabled for NIO for basic troubleshooting purposes. Enable Trace logging at the account level with the following:

$ zmprov aal user@example.com zimbra.imap trace
Verified Against: ZCS 8.0.x Date Created: 12/07/12
Article ID: https://wiki.zimbra.com/index.php?title=IMAP_NIO Date Modified: 2015-07-11



Try Zimbra

Try Zimbra Collaboration with a 60-day free trial.
Get it now »

Want to get involved?

You can contribute in the Community, Wiki, Code, or development of Zimlets.
Find out more. »

Looking for a Video?

Visit our YouTube channel to get the latest webinars, technology news, product overviews, and so much more.
Go to the YouTube channel »

Jump to: navigation, search