Mail friert ein / Mails bleiben weiß bei vielen IMAP-Konten: Thread-Deadlock gefunden, Workaround anbei
Hallo zusammen,
wir nutzen Apple Mail mit sehr vielen IMAP-Konten (rund 35 bis 40 Konten bei verschiedenen Anbietern mit insgesamt etwa 275.000 E-Mails). Auf einem Mac hatten wir damit ständig Probleme:
Der Inhalt von E-Mails bleibt leer bzw. weiß. Postfächer laden nicht mehr.
Apple Mail erholt sich nicht von selbst und muss mehrmals am Tag sofort beendet werden.
Nach dem Neustart läuft es kurz, bis zum nächsten automatischen Abruf.
Die Nutzerin sieht auch in der Mail-App auf ihrem iPhone mit denselben Konten weiße Mails.
Was wir ausgeschlossen haben:
- Beschädigte E-Mails: Wir haben alle rund 275.000 EMLX-Dateien überprüft und nur eine Handvoll harmloser MIME-Fehler gefunden.
- Eine beschädigte Mail-Datenbank: Der Envelope Index hat den SQLite-Integritätscheck bestanden. Fehler kommt auch auf einem komplett neu eingerichteten Mac zustande.
- Festplattendienstprogramm lief durch, aber Fehler war natürlich weiterhin vorhanden
- Mail starten mit gedrückter Umschalttaste brachte ebenfalls keine Besserung
Was die Logs gezeigt haben:
Wir haben den hängenden Mail-Prozess mit
sample mail 10 -file ~/Desktop/mail_hang.txt
aufgezeichnet. Die entscheidende Zeile im Bericht war:
Dispatch Thread Soft Limit: 64 erreicht in 6664 von 6664 Proben – zu viele Dispatch-Threads sind in synchronen Operationen blockiert.
- 37 Threads hingen in -[MFIMAPAccount _synchronizeMailboxListDuringMailCheck] und warteten jeweils auf eine IMAP-Verbindung.
- 26 Threads hingen in -[IMAPTaskManager _createNewConnectionSynchronously:isFirstConnection:] und warteten auf einen freien Thread.
- Der Haupt-Thread war untätig und kein einziger Thread hat ins Netzwerk gelesen oder geschrieben.
Unsere Deutung: Beim Abrufen neuer E-Mails startet Mail für jedes Konto gleichzeitig einen Abgleich der Ordnerliste. Jeder Abgleich blockiert einen Thread, solange er auf eine Verbindung wartet. Der Aufbau dieser Verbindung benötigt wiederum einen Thread. Bei genügend Konten sind alle 64 Threads mit Warten belegt und es geht nichts mehr voran. Das ist ein Deadlock. Er erklärt die weißen Mails und warum sich Mail nicht von selbst erholt.
Wir haben das über den Feedback-Assistenten an Apple gemeldet.
Unser Workaround
Die Idee: Mail soll nie alle Konten gleichzeitig abrufen.
- „Neue E-Mails abrufen“ auf Manuell stellen (defaults write com.apple.mail AutoFetch -bool NO).
- Eine versteckte Einstellung setzen, die wir im Mail-Programm gefunden haben. Sie verhindert, dass Mail jedes Mal alle Konten abruft, wenn es in den Vordergrund kommt: defaults write com.apple.mail DisableSynchronizationOnAppActivation -bool YES. Die Einstellung ist nicht dokumentiert, ihre Wirkung haben wir aus dem Programm abgeleitet und nicht von Apple bestätigt.
- Einen kleinen LaunchAgent installieren, der die Konten nacheinander per AppleScript abruft (check for new mail for account …). Standardmäßig läuft er alle 10 Minuten mit 10 Sekunden Pause zwischen den Konten. Der Push über IMAP IDLE für den Posteingang funktioniert weiter wie bisher.
- Wir haben das als Script mit Installation, Deinstallation (stellt die ursprünglichen Einstellungen wieder her) und Statusanzeige verpackt. Die Statusanzeige prüft auch im System-Log, ob Mail trotzdem noch alle Konten auf einmal abgerufen hat
Aktuell läuft es, keine Abstürze mehr, kein Hängen.
Grenzen: Direkt nach dem Start gleicht Mail möglicherweise trotzdem alle Konten gleichzeitig ab. Mails in anderen Ordnern als dem Posteingang kommen bis zu eine Runde später an. Auf iPhone und iPad hilft der Workaround nicht. Langfristig sauberer ist es, viele Adressen in wenigen Postfächern zusammenzufassen und über Aliasse zu senden.
Wer viele IMAP-Konten und ähnliche Hänger hat: Es würde helfen zu wissen, ob eure sample-Ausgabe dieselbe Zeile „Dispatch Thread Soft Limit: 64“ zeigt.
Vielleicht hilft es jemandem, der dieses Problem hat. Es wäre natürlich ein Traum, wenn Apple hier nachbessert und man unabhängig von der Anzahl der Konten normal arbeiten kann, ohne dass es zu Abstürzen kommt.
MacBook Pro 16″, macOS 26.7