Dieser Beitrag zeigt die Lösung für das folgende Phänomen unter macOS Catalina: Völlig unvermittelt poppen nach längerem Arbeiten die folgenden Systemmeldungen auf: “mdworker crashed”, gefolgt von Crash-Meldungen diverser Dienste und Apps wie iCloud,  Google Chrome, Apple Mail etc.

Der mdworker Prozess ist unter macOS für Spotlight-Suchindex zuständig. Was zuerst wie ein beschädigtes macOS, ein defekter Spotlight Index oder defektes RAM aussieht, kann auch einen ganz anderen Grund haben.

Die Lösung für zufällige Spotlight Crashes unter macOS Catalina

Die Ursache hierfür ist in der Regel ein Überschreiten der maximal gleichzeitig geöffneten Dateien pro User (ulimit). Die Werkseinstellung von macOS Catalina ist hierfür 256.

Hat man diverse Cloud- oder Sync-Dienste am Laufen wird es beim Start von mdworker sehr schnell eng. Daher ist es auch genau dieser Dienst, der sich zuerst verabschiedet.

Der folgende Terminal-Befehl Auskunft darüber, welcher Prozess wie viele Dateien aktuell geöffnet hält:

lsof | awk '{print $1}' | uniq -c | sort -rn

Lässt sich der Verursacher nicht manuell eliminieren, lässt sich das ulimit mit diesem Befehl anheben:

sudo ulimit -n 10240

Auf die Frage nach dem Passwort bitte das Anmeldepasswort eingeben und mit der Eingabetaste bestätigen.

Leider ist unter macOS Catalina die maximale Anzahl geöffneter Dateien nach dem aktuellen Wissensstand auf 10240 limitiert.

Der folgende Befehl zeigt das aktuelle ulimit an:

ulimit -n

Die Ausgabe sollte nach der Änderung dann “10240” sein.

/etc/sysctl.conf unter macOS Catalina?
kern.maxfiles und kern.maxfilesperproc dauerhaft ändern

Neben ulimit spielen die beiden Kernel-Parameter kern.maxfiles und kern.maxfilesperproc hier ebenfalls eine entscheidende Rolle. Diese konnten vor Catalina über /etc/sysctl.conf dauerhaft geändert werden, doch leider funktioniert das unter Catalina nicht mehr.

Um die beiden Parameter für die aktuelle User-Sitzung anzupassen, ist es am einfachsten, die entsprechenden Befehle in ein Automator-Script zu packen. YOUR_PASSWORD muss dabei durch das Anmeldepasswort des Benutzers ersetzt werden:

echo YOUR_PASSWORD|sudo -S sysctl -w kern.maxfiles=20480 
echo YOUR_PASSWORD|sudo -S sysctl -w kern.maxfilesperproc=20480

Die Automator-Aktion sieht dann wie folgt aus:

Das Skript speichern wir als Programm und tragen es unter  Systemeinstellungen/Benutzer/Anmeldeobjekte ein.

Danach am besten noch ein Neustart und die Welt von macOs Catalina ist wieder in Ordnung :-)