http://hg.dovecot.org/dovecot-2.2/rev/64c73e6bd397
Today I finally committed the "imap-hibernate" feature that I first started developing about a year ago (and had been thinking about for several years before that). The main purpose here is to reduce the number of imap processes and the amount of memory they use by moving IDLEing connections into imap-hibernate processes where they are waiting for something to happen (changes to the mailbox or IMAP client to do something). Mailbox changes are noticed only if inotify/kqueue is enabled, so without them the hibernation feature won't work well.
For now only the IMAP connections that are in IDLE can be hibernated. In theory non-IDLEing connections could also be hibernated, but the main problem here is that if EXPUNGEs can't be sent at the time the hibernation is over, the current code can't handle it. They would require recreating a view that contains such expunged messages, which could be possible with some extra work.
Some IMAP extensions aren't supported yet:
- NOTIFY: This would just need to import/export the NOTIFY state. Also hibernation could be done at any time if VANISHED replies could be sent to the selected mailbox.
- SEARCH=CONTEXT: A bit more troublesome extension to support. I'm not sure how big the trouble would be. It's rarely used though.
- COMPRESS: The [de]compression code would need to be moved to login process instead of being done in imap-compress plugin. This would be a larger change, although it's also useful for various other purposes.
The hibernation can be enabled for now simply by setting imap_hibernate_timeout setting to non-zero, which controls how long to wait after client has issued IDLE (and nothing happens) until the process hibernates.
Some future work might include:
- Moving the hibernation all the way to the first Dovecot proxy layer to avoid the need for imap-hibernate process at all. (Also moving the COMPRESS handling all the way there.)
- Dynamically adjusting when the client should be hibernated instead of just a fixed imap_hibernate_timeout setting. Especially try to avoid such a situation where the hibernation is almost always terminated soon after it started. Although that probably is unlikely, so maybe not worth the trouble to prevent..
- Hibernation could be used to control the load of the server. If it's running too slow or if there are already too many imap processes, some of the connections could be moved to hibernation stage. Or just kept in hibernation for a while longer even after the imap process would normally be recreated (e.g. wait for several minutes before reporting new emails, or several seconds before replying to DONE).
- The EXPUNGE/VANISHED and FETCH FLAGS replies aren't sent asynchronously, but instead fully buffered to the output buffer. This works as long as the list of changes after hibernation isn't huge, but otherwise it's wasting a lot of memory.
- Maybe support non-inotify/kqueue change notifications from lib-storage. This could be complicated though to do efficiently. Or a simple way would be to just send a UDP or UNIX datagram packet on all changes to all the imap-hibernate processes and see if anybody cares about those. I'm not sure how efficient that would be.
==> /var/log/dovecot/dovecot.log <== Aug 25 09:42:07 nihlus dovecot: imap(tlx@leuxner.net): Error: net_connect_unix(/var/run/dovecot/imap-hibernate) failed: Permission denied Aug 25 09:42:07 nihlus dovecot: imap(tlx@leuxner.net): Error: Couldn't hibernate imap client: Couldn't export state: Virtual mailboxes have no GUIDs Aug 25 09:42:07 nihlus dovecot: imap(tlx@leuxner.net): Error: net_connect_unix(/var/run/dovecot/imap-hibernate) failed: Permission denied
$ l /var/run/dovecot/ total 8 srw------- 1 root root 0 Aug 24 18:22 anvil srw------- 1 root root 0 Aug 24 18:22 anvil-auth-penalty srw------- 1 dovecot root 0 Aug 25 09:17 auth-client srw------- 1 dovecot root 0 Aug 25 09:17 auth-login srw------- 1 root root 0 Aug 25 09:17 auth-master -rw------- 1 root root 32 Aug 7 12:03 auth-token-secret.dat srw-rw-rw- 1 dovecot root 0 Aug 25 09:17 auth-userdb srw------- 1 doveauth root 0 Aug 25 09:17 auth-worker srw------- 1 root root 0 Aug 25 09:17 config srw------- 1 root root 0 Aug 25 09:17 dict srw------- 1 root root 0 Aug 25 09:17 director-admin srw------- 1 root root 0 Aug 25 09:17 director-userdb srw-rw-rw- 1 root root 0 Aug 25 09:17 dns-client srw------- 1 root root 0 Aug 25 09:17 doveadm-server lrwxrwxrwx 1 root root 25 Aug 24 18:22 dovecot.conf -> /etc/dovecot/dovecot.conf drwxr-xr-x 2 root root 40 Aug 7 12:03 empty srw------- 1 root root 0 Aug 25 09:17 imap-hibernate srw------- 1 root root 0 Aug 25 09:17 imap-master srw-rw-rw- 1 root root 0 Aug 25 09:17 imap-urlauth srw------- 1 dovecot root 0 Aug 25 09:17 imap-urlauth-worker srw-rw-rw- 1 root root 0 Aug 25 09:17 indexer srw------- 1 dovecot root 0 Aug 25 09:17 indexer-worker srw------- 1 root root 0 Aug 25 09:17 ipc srw-rw-rw- 1 root root 0 Aug 25 09:17 lmtp srw------- 1 root root 0 Aug 25 09:17 log-errors drwxr-x--- 2 root dovenull 120 Aug 25 09:17 login -rw------- 1 root root 6 Aug 24 18:22 master.pid srw------- 1 root root 0 Aug 25 09:17 replication-notify prw------- 1 root root 0 Aug 25 09:17 replication-notify-fifo srw------- 1 dovecot root 0 Aug 25 09:17 replicator srw-rw-rw- 1 root root 0 Aug 25 09:17 ssl-params srw------- 1 root root 0 Aug 25 09:17 stats prw------- 1 vmail root 0 Aug 25 09:43 stats-mail drwxr-x--- 2 root dovenull 80 Aug 25 09:17 token-login
The socket is created as ‚root‘ per default. Does it need to run under another user to mitigate the permissions issue?
Regards Thomas
- Thomas Leuxner tlx@leuxner.net 2015.08.25 09:45:
==> /var/log/dovecot/dovecot.log <== Aug 25 09:42:07 nihlus dovecot: imap(tlx@leuxner.net): Error: net_connect_unix(/var/run/dovecot/imap-hibernate) failed: Permission denied Aug 25 09:42:07 nihlus dovecot: imap(tlx@leuxner.net): Error: Couldn't hibernate imap client: Couldn't export state: Virtual mailboxes have no GUIDs Aug 25 09:42:07 nihlus dovecot: imap(tlx@leuxner.net): Error: net_connect_unix(/var/run/dovecot/imap-hibernate) failed: Permission denied
'chmod 666' mitigates the permission issue on the socket. However it seems to have other issues then:
==> /var/log/dovecot/dovecot.log <== Aug 25 09:56:49 nihlus dovecot: imap-hibernate: Error: Failed to parse client input: Invalid peer_ip value: Aug 25 09:56:49 nihlus dovecot: imap(tlx@leuxner.net): Error: /var/run/dovecot/imap-hibernate returned failure: Failed to parse client input: Invalid peer_ip value: Aug 25 09:56:49 nihlus dovecot: imap: Error: Aug 25 09:56:49 nihlus dovecot: imap-hibernate: Error: Failed to parse client input: Invalid peer_ip value: Aug 25 09:56:49 nihlus dovecot: imap(tlx@leuxner.net): Error: /var/run/dovecot/imap-hibernate returned failure: Failed to parse client input: Invalid peer_ip value: Aug 25 09:56:49 nihlus dovecot: imap: Error:
On 25 Aug 2015, at 11:01, Thomas Leuxner tlx@leuxner.net wrote:
- Thomas Leuxner tlx@leuxner.net 2015.08.25 09:45:
==> /var/log/dovecot/dovecot.log <== Aug 25 09:42:07 nihlus dovecot: imap(tlx@leuxner.net): Error: net_connect_unix(/var/run/dovecot/imap-hibernate) failed: Permission denied Aug 25 09:42:07 nihlus dovecot: imap(tlx@leuxner.net): Error: Couldn't hibernate imap client: Couldn't export state: Virtual mailboxes have no GUIDs
I guess virtual mailboxes should be fixed somehow. The lack of GUIDs for them has caused some other issues too .. So I guess they'll just need to be generated a GUID.
Aug 25 09:42:07 nihlus dovecot: imap(tlx@leuxner.net): Error: net_connect_unix(/var/run/dovecot/imap-hibernate) failed: Permission denied
'chmod 666' mitigates the permission issue on the socket. However it seems to have other issues then:
You can also change the unix_listener { user, group, mode } as needed for different services (imap, imap-hibernate). http://wiki2.dovecot.org/Services has some more info.
==> /var/log/dovecot/dovecot.log <== Aug 25 09:56:49 nihlus dovecot: imap-hibernate: Error: Failed to parse client input: Invalid peer_ip value: Aug 25 09:56:49 nihlus dovecot: imap(tlx@leuxner.net): Error: /var/run/dovecot/imap-hibernate returned failure: Failed to parse client input: Invalid peer_ip value: Aug 25 09:56:49 nihlus dovecot: imap: Error:
Looks like it was broken for TLS connections. Fixed now.
- Timo Sirainen tss@iki.fi 2015.08.25 17:28:
==> /var/log/dovecot/dovecot.log <== Aug 25 09:42:07 nihlus dovecot: imap(tlx@leuxner.net): Error: net_connect_unix(/var/run/dovecot/imap-hibernate) failed: Permission denied Aug 25 09:42:07 nihlus dovecot: imap(tlx@leuxner.net): Error: Couldn't hibernate imap client: Couldn't export state: Virtual mailboxes have no GUIDs
Those are completely gone with the latest two commits. I was expecting the permission error to fire up. It seems a bit too quite. If it works would it spawn a hibernate-process? It looks so from the service section, but I don't see any "hibernate" processes active.
'chmod 666' mitigates the permission issue on the socket. However it seems to have other issues then:
You can also change the unix_listener { user, group, mode } as needed for different services (imap, imap-hibernate). http://wiki2.dovecot.org/Services has some more info.
$ doveconf -a | grep -A 20 'service imap-hibernate' service imap-hibernate { […] unix_listener imap-hibernate { group = mode = 0600 user = } user = $default_internal_user
The question is what user it should be - or what user it should match in case several users come into play. With the standard setting $default_internal_user as above it does not work out of the box (at least with my config).
Regards Thomas
On 25 Aug 2015, at 20:55, Thomas Leuxner tlx@leuxner.net wrote:
- Timo Sirainen tss@iki.fi 2015.08.25 17:28:
==> /var/log/dovecot/dovecot.log <== Aug 25 09:42:07 nihlus dovecot: imap(tlx@leuxner.net): Error: net_connect_unix(/var/run/dovecot/imap-hibernate) failed: Permission denied Aug 25 09:42:07 nihlus dovecot: imap(tlx@leuxner.net): Error: Couldn't hibernate imap client: Couldn't export state: Virtual mailboxes have no GUIDs
Those are completely gone with the latest two commits. I was expecting the permission error to fire up. It seems a bit too quite. If it works would it spawn a hibernate-process? It looks so from the service section, but I don't see any "hibernate" processes active.
It no longer logs an error if the selected mailbox is virtual. It simply doesn't start up the hibernate process. If you set mail_debug=yes it'll log why it won't start the hibernation. Also just committed a change that logs the mailbox name.
'chmod 666' mitigates the permission issue on the socket. However it seems to have other issues then:
You can also change the unix_listener { user, group, mode } as needed for different services (imap, imap-hibernate). http://wiki2.dovecot.org/Services has some more info.
$ doveconf -a | grep -A 20 'service imap-hibernate' service imap-hibernate { […] unix_listener imap-hibernate { group = mode = 0600 user = } user = $default_internal_user
The question is what user it should be - or what user it should match in case several users come into play. With the standard setting $default_internal_user as above it does not work out of the box (at least with my config).
There's no good default setting here. It depends on your userdb settings and/or mail_uid setting. So for example if your imap processes are running as vmail user, you should set service imap-hibernate { unix_listener imap-hibernate { user = vmail } }. Then again if you are using system users (or otherwise multiple UIDs) it gets more difficult to implement this securely (mode=0666 works always, but security isn't too good). This same problem exists for various other parts of Dovecot, for example indexer-worker and dict services.
- Timo Sirainen tss@iki.fi 2015.08.25 22:21:
There's no good default setting here. It depends on your userdb settings and/or mail_uid setting. So for example if your imap processes are running as vmail user, you should set service imap-hibernate { unix_listener imap-hibernate { user = vmail } }. Then again if you are using system users (or otherwise multiple UIDs) it gets more difficult to implement this securely (mode=0666 works always, but security isn't too good). This same problem exists for various other parts of Dovecot, for example indexer-worker and dict services.
I have it working (I guess) with these user settings (virtual users using 'vmail'):
service imap-hibernate { unix_listener imap-hibernate { user = vmail } }
I had to assign the imap-master socket the user the imap-hibernate process is using to avoid messages like this:
Aug 25 23:16:02 nihlus dovecot: imap-hibernate(tlx@leuxner.net): Error: net_connect_unix(/var/run/dovecot/imap-master) failed: Permission denied Aug 25 23:16:02 nihlus dovecot: imap-hibernate(tlx@leuxner.net): Failed to connect to master socket in=126 out=944 hdr=0 body=0 del=0 exp=0 trash=0
service imap { unix_listener imap-master { user = dovecot } }
With this I see messages like this in the logs:
Aug 26 09:48:06 nihlus dovecot: imap-hibernate(tlx@leuxner.net): Connection closed in=189 out=4252 hdr=0 body=0 del=0 exp=0 trash=0 Aug 26 12:20:29 nihlus dovecot: imap-hibernate(tlx@leuxner.net): Connection closed in=109 out=4714 hdr=0 body=0 del=0 exp=0 trash=0
I'm a bit puzzled as to when hibernate actually kicks in because most of the time I see normal imap processes running without them being hibernated:
$ ps aux | grep dovecot/imap dovenull 6791 0.0 0.0 18196 4772 ? S 06:39 0:00 dovecot/imap-login dovenull 7107 0.0 0.0 18196 4736 ? S 08:00 0:00 dovecot/imap-login dovenull 7112 0.0 0.0 18332 4492 ? S 08:00 0:00 dovecot/imap-login dovenull 7333 0.0 0.0 18332 4772 ? S 08:45 0:00 dovecot/imap-login dovenull 7675 0.0 0.0 18196 4628 ? S 10:13 0:00 dovecot/imap-login dovenull 7677 0.0 0.0 18332 4532 ? S 10:14 0:00 dovecot/imap-login dovenull 7821 0.0 0.0 18196 4532 ? S 10:44 0:00 dovecot/imap-login dovenull 8156 0.0 0.0 18196 4756 ? S 12:01 0:00 dovecot/imap-login vmail 8157 0.0 0.0 45624 9608 ? S 12:01 0:00 dovecot/imap dovenull 8158 0.0 0.0 18332 4628 ? S 12:01 0:00 dovecot/imap-login vmail 8159 0.0 0.0 44772 9256 ? S 12:01 0:00 dovecot/imap dovenull 8160 0.0 0.0 18196 4652 ? S 12:01 0:00 dovecot/imap-login vmail 8161 0.0 0.0 46072 9760 ? S 12:01 0:00 dovecot/imap dovenull 8162 0.0 0.0 18196 4548 ? S 12:01 0:00 dovecot/imap-login dovenull 8279 0.0 0.0 18332 4736 ? S 12:22 0:00 dovecot/imap-login vmail 8280 0.0 0.0 40712 5164 ? S 12:22 0:00 dovecot/imap dovenull 8341 0.0 0.0 18196 4740 ? S 12:25 0:00 dovecot/imap-login vmail 8344 0.0 0.0 46312 10568 ? S 12:25 0:00 dovecot/imap
On 08/26/2015 01:33 PM, Thomas Leuxner wrote:
- Timo Sirainen tss@iki.fi 2015.08.25 22:21:
There's no good default setting here. It depends on your userdb settings and/or mail_uid setting. So for example if your imap processes are running as vmail user, you should set service imap-hibernate { unix_listener imap-hibernate { user = vmail } }. Then again if you are using system users (or otherwise multiple UIDs) it gets more difficult to implement this securely (mode=0666 works always, but security isn't too good). This same problem exists for various other parts of Dovecot, for example indexer-worker and dict services.
I have it working (I guess) with these user settings (virtual users using 'vmail'):
service imap-hibernate { unix_listener imap-hibernate { user = vmail } }
I had to assign the imap-master socket the user the imap-hibernate process is using to avoid messages like this:
Aug 25 23:16:02 nihlus dovecot: imap-hibernate(tlx@leuxner.net): Error: net_connect_unix(/var/run/dovecot/imap-master) failed: Permission denied Aug 25 23:16:02 nihlus dovecot: imap-hibernate(tlx@leuxner.net): Failed to connect to master socket in=126 out=944 hdr=0 body=0 del=0 exp=0 trash=0
service imap { unix_listener imap-master { user = dovecot } }
With this I see messages like this in the logs:
Aug 26 09:48:06 nihlus dovecot: imap-hibernate(tlx@leuxner.net): Connection closed in=189 out=4252 hdr=0 body=0 del=0 exp=0 trash=0 Aug 26 12:20:29 nihlus dovecot: imap-hibernate(tlx@leuxner.net): Connection closed in=109 out=4714 hdr=0 body=0 del=0 exp=0 trash=0
I'm a bit puzzled as to when hibernate actually kicks in because most of the time I see normal imap processes running without them being hibernated: Did you specify a value other than zero for 'imap_hibernate_timeout'?
br, Teemu
$ ps aux | grep dovecot/imap dovenull 6791 0.0 0.0 18196 4772 ? S 06:39 0:00 dovecot/imap-login dovenull 7107 0.0 0.0 18196 4736 ? S 08:00 0:00 dovecot/imap-login dovenull 7112 0.0 0.0 18332 4492 ? S 08:00 0:00 dovecot/imap-login dovenull 7333 0.0 0.0 18332 4772 ? S 08:45 0:00 dovecot/imap-login dovenull 7675 0.0 0.0 18196 4628 ? S 10:13 0:00 dovecot/imap-login dovenull 7677 0.0 0.0 18332 4532 ? S 10:14 0:00 dovecot/imap-login dovenull 7821 0.0 0.0 18196 4532 ? S 10:44 0:00 dovecot/imap-login dovenull 8156 0.0 0.0 18196 4756 ? S 12:01 0:00 dovecot/imap-login vmail 8157 0.0 0.0 45624 9608 ? S 12:01 0:00 dovecot/imap dovenull 8158 0.0 0.0 18332 4628 ? S 12:01 0:00 dovecot/imap-login vmail 8159 0.0 0.0 44772 9256 ? S 12:01 0:00 dovecot/imap dovenull 8160 0.0 0.0 18196 4652 ? S 12:01 0:00 dovecot/imap-login vmail 8161 0.0 0.0 46072 9760 ? S 12:01 0:00 dovecot/imap dovenull 8162 0.0 0.0 18196 4548 ? S 12:01 0:00 dovecot/imap-login dovenull 8279 0.0 0.0 18332 4736 ? S 12:22 0:00 dovecot/imap-login vmail 8280 0.0 0.0 40712 5164 ? S 12:22 0:00 dovecot/imap dovenull 8341 0.0 0.0 18196 4740 ? S 12:25 0:00 dovecot/imap-login vmail 8344 0.0 0.0 46312 10568 ? S 12:25 0:00 dovecot/imap
- Teemu Huovila teemu.huovila@dovecot.fi 2015.08.27 13:58:
Did you specify a value other than zero for 'imap_hibernate_timeout'?
Yes I did:
$ doveconf imap_hibernate_timeout imap_hibernate_timeout = 1 mins
I sometimes see one imap-hibernate process (only one), but several imap processes active which should be idling...
On 08/27/2015 07:39 PM, Thomas Leuxner wrote:
- Teemu Huovila teemu.huovila@dovecot.fi 2015.08.27 13:58:
Did you specify a value other than zero for 'imap_hibernate_timeout'?
Yes I did:
$ doveconf imap_hibernate_timeout imap_hibernate_timeout = 1 mins
I sometimes see one imap-hibernate process (only one), but several imap processes active which should be idling... Does "should be" mean you know or suspect the clients have issued the IMAP IDLE command more than one minute ago? If yes and you dont see any errors in Dovecot logs, I do not know why that is.
Teemu
On 26 Aug 2015, at 13:33, Thomas Leuxner tlx@leuxner.net wrote:
With this I see messages like this in the logs:
Aug 26 09:48:06 nihlus dovecot: imap-hibernate(tlx@leuxner.net): Connection closed in=189 out=4252 hdr=0 body=0 del=0 exp=0 trash=0 Aug 26 12:20:29 nihlus dovecot: imap-hibernate(tlx@leuxner.net): Connection closed in=109 out=4714 hdr=0 body=0 del=0 exp=0 trash=0
So hibernation is at least sometimes used. Here the IMAP client got disconnected while IDLEing.
I'm a bit puzzled as to when hibernate actually kicks in because most of the time I see normal imap processes running without them being hibernated:
$ ps aux | grep dovecot/imap vmail 8157 0.0 0.0 45624 9608 ? S 12:01 0:00 dovecot/imap dovenull 8158 0.0 0.0 18332 4628 ? S 12:01 0:00 dovecot/imap-login vmail 8159 0.0 0.0 44772 9256 ? S 12:01 0:00 dovecot/imap dovenull 8160 0.0 0.0 18196 4652 ? S 12:01 0:00 dovecot/imap-login vmail 8161 0.0 0.0 46072 9760 ? S 12:01 0:00 dovecot/imap dovenull 8162 0.0 0.0 18196 4548 ? S 12:01 0:00 dovecot/imap-login dovenull 8279 0.0 0.0 18332 4736 ? S 12:22 0:00 dovecot/imap-login vmail 8280 0.0 0.0 40712 5164 ? S 12:22 0:00 dovecot/imap dovenull 8341 0.0 0.0 18196 4740 ? S 12:25 0:00 dovecot/imap-login vmail 8344 0.0 0.0 46312 10568 ? S 12:25 0:00 dovecot/imap
Set verbose_proctitle=yes and you'll see what the imap processes are doing. It'll show IDLE in the ps output if the client is IDLEing. Although it doesn't say how long the client has been doing it.
On 29 Aug 2015, at 13:20, Timo Sirainen tss@iki.fi wrote:
I'm a bit puzzled as to when hibernate actually kicks in because most of the time I see normal imap processes running without them being hibernated:
Also if you set mail_debug=yes Dovecot will log "Couldn't hibernate imap client:" lines if it attempted to start hibernation but it couldn't be done for whatever reason.
- Timo Sirainen tss@iki.fi 2015.08.29 12:20:
Set verbose_proctitle=yes and you'll see what the imap processes are doing. It'll show IDLE in the ps output if the client is IDLEing. Although it doesn't say how long the client has been doing it.
dovenull 1318 0.0 0.0 18340 4772 ? S 17:50 0:00 dovecot/imap-login [1 connections (1 TLS)] dovenull 1333 0.0 0.0 18340 4576 ? S 17:50 0:00 dovecot/imap-login [1 connections (1 TLS)] dovenull 1335 0.0 0.0 18200 4652 ? S 17:50 0:00 dovecot/imap-login dovenull 1336 0.0 0.0 18200 4676 ? S 17:50 0:00 dovecot/imap-login dovenull 1342 0.0 0.0 18340 4772 ? S 17:51 0:00 dovecot/imap-login [1 connections (1 TLS)] dovenull 1704 0.0 0.0 18200 4572 ? S 19:15 0:00 dovecot/imap-login dovenull 1709 0.0 0.0 18200 4652 ? S 19:15 0:00 dovecot/imap-login dovenull 1711 0.0 0.0 18200 4636 ? S 19:15 0:00 dovecot/imap-login dovenull 1994 0.0 0.0 18200 4740 ? S 20:56 0:00 dovecot/imap-login dovenull 1997 0.0 0.0 18200 4568 ? S 20:56 0:00 dovecot/imap-login vmail 1998 0.0 0.0 45448 10048 ? S 20:56 0:00 dovecot/imap [tlx@leuxner.net 1.2.3.4 IDLE] dovenull 1999 0.0 0.0 18340 4732 ? S 20:56 0:00 dovecot/imap-login [1 connections (1 TLS)] dovenull 2001 0.0 0.0 18200 4796 ? S 20:56 0:00 dovecot/imap-login vmail 2002 0.0 0.0 52880 13500 ? S 20:56 0:00 dovecot/imap [tlx@leuxner.net 1.2.3.4 IDLE] dovecot 2008 0.0 0.0 9380 936 ? S 20:57 0:00 dovecot/imap-hibernate [2 connections]
After disabling "check for new messages" polling in the client it looks a lot better, multiple connections have been hibernated. Thanks.
Le 25 août 2015 à 01:27, Timo Sirainen a écrit :
http://hg.dovecot.org/dovecot-2.2/rev/64c73e6bd397
Today I finally committed the "imap-hibernate" feature that I first started developing about a year ago (and had been thinking about for several years before that). The main purpose here is to reduce the number of imap processes and the amount of memory they use by moving IDLEing connections into imap-hibernate processes where they are waiting for something to happen (changes to the mailbox or IMAP client to do something). Mailbox changes are noticed only if inotify/kqueue is enabled, so without them the hibernation feature won't work well.
[…]
Wow! I remember you told us about such a development some times ago; many, many thanks for having persevered.
Unfortunately, I won’t be able to test that feature in a near future. In the meantime, I’ll be enthusiastically reading any report our list’s fellows could share. :-)
Axel
participants (4)
-
Axel Luttgens
-
Teemu Huovila
-
Thomas Leuxner
-
Timo Sirainen