Dovecot: process_limit reached

Lesedauer: ~2 Minuten

Bei dem Mail Delivery Agent Dovecot kann es dazu kommen, dass keine IMAP-Verbindungen mehr angenommen werden. In den Logfiles kann man dann solche Einträge finden:

dovecot: master: Warning: service(imap-login): process_limit (100) reached, client connections are being dropped

Dies passiert vor allem, wenn mehrere User den Mail Server verwenden. Das Problem besteht darin, dass bei jeder Verbindung ein neuer dovecot/imap-login Prozess gestartet wird. Fragt ein User nun mehrere Ordner per IDLE ab, wird für jeden Ordner so ein Prozess erzeugt. Daher erreicht man hier schnell das voreingestellte Limit von 100 Prozessen. Neue Verbindungen werden dann zurückgewiesen und erst wieder angenommen, wenn alte Verbindungen, und damit auch Prozesse, beendet wurden.

Um dieses Problem zu beheben, gibt es nun 2 Möglichkeiten.

Option 1: Erhöhen des Prozess Limit

Man kann in den Dovecot-Einstellungen die Anzahl der möglichen Prozesse erhöhen. Hierfür bearbeitet man die Datei conf.d/10-master.conf. Hier muss der service imap-login Block um den Eintrag _processlimit = X am Ende ergänzt werden. Wobei X einen Integer darstellt. Je nach Anzahl der User sollte man den Wert graduell erhöhen.

conf.d/10-master.conf

service imap-login {

  process_limit = 300
}

Bei diesem Beispiel wurde das Limit von 100 Prozessen auf 300 erhöht.

Option 2: Performance Mode

Alternativ kann man Dovecot in den so genannten Performance Mode versetzt. Statt, dass für jeden Login ein eigener Prozess erzeugt wird, wird alles von einem einzigen Prozess übernommen. Dies erhöht sogar zusätzlich die Geschwindigkeit von Dovecot geringfügig. Allerdings geschieht dies zu Lasten der Sicherheit. In diesem Fall teilen sich alle User einen einzigen Prozess und damit auch den zugewiesenen Adressbereich im Speicher teilen. Das Daten anderer User ausgelesen werden ist zwar unwahrscheinlich, sollte aber trotzdem hier nicht unerwähnt bleiben.

Um den Performance Mode zu aktiveren, muss ebenfalls die Datei conf.d/10-master.conf bearbeitet werden. Der service imap-login Block wird um die beiden Einträge _servicecount = 0 und _process_minavail = 1 erweitert. Die Einstellung _servicecount = 0 bewirkt, dass ein Prozess unendlich viele Verbindungen annehmen kann und _process_minavail = 1 sorgt dafür, dass generell immer mindestens ein Prozess zur Verfügung steht um Verbindungen anzunehmen.

conf.d/10-master.conf

service imap-login {

  service_count = 0
  process_min_avail = 1
}

Ab diesem Punkt sollte Dovecot auch bei größeren Aufkommen von Verbindungen diese nicht zurückweisen und wie gewünscht auf alle Anfragen antworten.