Db4 problems

Andrew Morgan morgan at orst.edu
Wed Jul 1 12:24:42 EDT 2009

On Wed, 1 Jul 2009, Paul van der Vlis wrote:

> Hello!
> I have errors in my log, and sometimes Cyrus crashes and I have to
> reboot the server because restarting gives this error:
> mail:~# /etc/init.d/cyrus2.2 restart
> Stopping Cyrus IMAPd: cyrmaster.
> Waiting for complete shutdown........
> fatal: incomplete shutdown detected, aborting.
> In the log I see all the time errors like:
> ------
> Jul  1 10:35:27 mail cyrus/imap[16841]: DBERROR db4: Database handles
> open during environment close
> Jul  1 10:35:27 mail cyrus/imap[16841]: DBERROR: error exiting
> application: Invalid argument
> ------
> When Cyrus stops working I see this in the logs:
> -------
> Jul  1 10:40:04 mail cyrus/imap[16920]: DBERROR db4: Logging region out
> of memory; you may need to increase its size
> Jul  1 10:40:04 mail cyrus/imap[16920]: DBERROR: opening
> /var/lib/cyrus/tls_sessions.db: Cannot allocate memory
> Jul  1 10:40:04 mail cyrus/imap[16920]: DBERROR: opening
> /var/lib/cyrus/tls_sessions.db: cyrusdb error
> ---------
> I am not sure what's the problem here.
> Do I need to increase the memory size of the Berkeley database?
> and where can I do that?
> Can I remove /var/lib/cyrus/tls_sessions.db?
> (I have the same problem with deliver.db.)
> What will be that "Databases handles open during environment close", can
> that give this problem?

Here's what I recommend - get rid of Berkeley DB in Cyrus and use skiplist 
instead.  :)

Change your backend database formats to skiplist in imapd.conf, something 

# Backend database formats to use
annotation_db: skiplist
duplicate_db: skiplist
mboxlist_db: skiplist
quota_db: quotalegacy
seenstate_db: skiplist
statuscache_db: skiplist
subscription_db: flat
tlscache_db: skiplist

A lot of us got tired of messing around with Berkeley DB and switched to 

If you decide to change formats, make sure you stop Cyrus and remove the 
contents of the {configdirectory}/db/ directory.  You'll also want to 
delete the deliver.db and tls_sessions.db files, assuming those are the 
ones you change.  tls_sessions.db does not contain any information that 
needs to persist between Cyrus restarts.  deliver.db contains duplicate 
messsage suppression information and is also used for vacation reply 
tracking.  The worst that will happen if you delete deliver.db is that 
someone may get a second vacation reply message sent out.


More information about the Info-cyrus mailing list