Fatal error: failed to mmap cache file

Diesen Beitrag schrieb ich 15 Jahre und 10 Monate zuvor; die nachfolgenden Ausführungen müssen heute weder genau so nach wie vor funktionieren, noch meiner heutigen Meinung entsprechen. Behalte das beim Lesen (und vor allem: beim Nachmachen!) bitte stets im Hinterkopf.

Geschätzte Lesezeit: 1 Minute

Es ist zum Auswachsen: auf einem OpenExchange-Setup, das sich auf cyrus-imapd und postfix stützt und das lange, sehr lange einfach vor sich hin funktioniert hat, erscheinen plötzlich nachfolgende Meldungen im Log:

Nov 10 11:44:09 ox imap[26765]: login: localhost [127.0.0.1] spillerm plaintext User logged in
Nov 10 11:44:09 ox imap[26740]: accepted connection
Nov 10 11:44:09 ox imap[26740]: login: localhost [127.0.0.1] spillerm plaintext User logged in
Nov 10 11:44:09 ox imap[26740]: IOERROR: mapping cache file for user.spillerm: Cannot allocate memory
Nov 10 11:44:09 ox imap[26750]: accepted connection
Nov 10 11:44:09 ox master[26850]: about to exec /usr/lib/cyrus-imapd/imapd
Nov 10 11:44:09 ox imap[26740]: Fatal error: failed to mmap cache file
Nov 10 11:44:09 ox master[32168]: process 26740 exited, status 75
Nov 10 11:44:09 ox master[32168]: service imap pid 26740 in BUSY state: terminated abnormally
Nov 10 11:44:09 ox imap[26850]: executed

Also in erster Instanz herausfinden, wo cyrus seinen Kram ablegt (falls man das nicht ohnehin weiß):

$ grep partition-default /etc/imapd.conf
partition-default: /var/spool/imap

Dann schauen wir uns mal an, wie gross das Cache-File des Users tatsächlich ist:

$ cd /var/spool/imap/s/user/spillerm
$ du -h cyrus.cache 
2.1G	cyrus.cache

Okay, das ist zu viel – selbst in Mailboxen mit hunderten Mails erreicht das File nicht eine solche Größe (wenn alles so läuft wie es soll)… Wie also Abhilfe schaffen?

  • cyrus stoppen
    $ /etc/init.d/cyrus-imapd stop
    
  • cyrus.cache dieses Users löschen; am Beispiel des Users spillerm könnte das beispielsweise so aussehen:
    $ rm /var/spool/imap/s/user/spillerm/cyrus.cache
    
  • Mailbox des Users rekonstruieren
    $ reconstruct -rf user.spillerm
    

Ist in /etc/imapd.conf allerdings unixhierarchysep: yes gesetzt, muss der Aufruf etwas modifiziert ausgeführt werden:

$ reconstruct -rf user/spillerm

Dadurch wird, unter anderem, cyrus.cache neu erzeugt. Der Dienst kann nun wieder gestartet werden.

$ /etc/init.d/cyrus-imapd start

Hat den Fehler nachhaltig behoben :)

Alle Bilder dieser Seite: © Marianne Spiller – Alle Rechte vorbehalten
Hintergrundbild: 2448x 2448px, Bild genauer anschauen – © Marianne Spiller – Alle Rechte vorbehalten

Eure Gedanken zu „Fatal error: failed to mmap cache file“

Ich freue mich über jeden Kommentar, es sei denn, er ist blöd. Deshalb behalte ich mir auch vor, die richtig blöden kurzerhand wieder zu löschen. Die Kommentarfunktion ist über GitHub realisiert, weshalb ihr euch zunächst dort einloggen und „utterances“ bestätigen müsst. Die Kommentare selbst werden im Issue-Tracker und mit dem Label „✨💬✨ comment“ erfasst – jeder Blogartikel ist ein eigenes Issue. Über GitHub könnt ihr eure Kommentare somit jederzeit bearbeiten oder löschen.