Glossar/Prozesse, die du sehen wirst

logd

Auch: einheitliche Protokollierung

Kurze Antwort

logd ist der macOS-Prozess, der das einheitliche Protokoll führt, die systemweite Aufzeichnung dessen, was macOS und deine Apps im Betrieb melden. Jeder Prozess übergibt seine Protokollmeldungen an logd, der sie komprimiert, die neuesten im Speicher hält und den Rest in einem Protokollspeicher auf der Festplatte sichert, wo die App „Konsole“ und der Befehl log im Terminal sie lesen.

Es gibt einen logd, er läuft als root, und launchd startet ihn beim Hochfahren des Mac. Seit macOS Sierra landen die meisten Meldungen nicht mehr in Textdateien in /var/log. Apps übergeben sie an logd, der sie in einem komprimierten Binärformat in /var/db/diagnostics speichert, mit dem festen Text jeder Meldung in /var/db/uuidtext. Deshalb liest du das Protokoll mit der Konsole oder dem Befehl log, statt eine Datei zu öffnen.

Seine CPU- und Festplattenlast folgt dem, wie viel der Rest des Mac protokolliert. Auf einem ruhigen Mac braucht er einen Bruchteil eines Prozents. Steht logd weit oben in der Liste, liegt es fast nie an logd selbst: Ein anderer Prozess schreibt viel schneller Meldungen als sonst, und logd erledigt die Arbeit, sie zu speichern.

Warum logd so viel CPU oder Festplatte braucht

Eine App oder ein Hintergrundprozess protokolliert in einer Schleife. Ein Prozess, der viele Male pro Sekunde scheitert und es erneut versucht, etwa ein Netzwerk-Client, der seinen Server nicht erreicht, eine hängende Synchronisierung oder ein Treiber, der immer wieder denselben Fehler meldet, kann Hunderttausende Meldungen pro Minute schreiben. logd komprimiert und sichert jede davon, und seine CPU-Last und „Geschriebene Byte“ steigen mit.

Zusätzliche Protokollierung für die Fehlersuche hat dieselbe Wirkung. Ein Protokollierungsprofil, das für einen Fehlerbericht installiert wurde, oder eine Änderung mit dem Befehl log config lässt logd Meldungen sichern, die er sonst nur im Speicher behalten würde.

Was du dagegen tun kannst

Finde den Prozess, der das Protokoll flutet, und kümmere dich um ihn, nicht um logd. Im Terminal ordnet log stats --last 5m Prozesse danach, wie viel sie in den letzten fünf Minuten protokolliert haben. Beende oder aktualisiere die App ganz oben, oder starte den Mac neu, wenn es ein hängender Hintergrundprozess ist.

Hast du ein Protokollierungsprofil installiert, das du nicht mehr brauchst, entferne es unter „Systemeinstellungen“ → „Allgemein“ → „Geräteverwaltung“. logd zu beenden, hilft nicht: macOS startet ihn sofort wieder, und der Prozess, der das Protokoll flutet, macht weiter.

So findest du den Prozess, der das Protokoll flutet

logd speichert nur, die nützliche Frage ist also, wer schreibt. Die Aktivitätsanzeige zeigt die Kosten, das Terminal den Verursacher.

  1. Öffne die Aktivitätsanzeige, klicke auf den Tab „CPU“, wähle „Darstellung“ → „Alle Prozesse“ und gib logd ins Suchfeld ein. Merk dir den Wert „% CPU“.
  2. Klicke auf den Tab „Festplatte“ und beobachte bei logd „Geschriebene Byte“. Steigt der Wert schnell, speichert er eine Flut von Meldungen auf die Festplatte.
  3. Leere das Suchfeld und sortiere den Tab „CPU“ nach „% CPU“. Der Prozess, der das Protokoll flutet, ist oft selbst beschäftigt und startet vielleicht immer wieder neu, jedes Mal mit einer neuen PID.
  4. Öffne das Terminal und führe log stats --last 5m aus. Unter „processes“ listet es die Prozesse auf, die in den letzten fünf Minuten am meisten protokolliert haben, mit der Zahl ihrer Ereignisse und Bytes. WindowServer und ein paar andere Systemprozesse protokollieren auf jedem Mac viel. Such also nach einem Prozess mit ungewöhnlich großem Anteil oder einem, der eigentlich untätig sein sollte.
  5. Um zu lesen, was dieser Prozess meldet, führe log show --last 5m --predicate 'process == "Name"' aus, mit dem Prozessnamen anstelle von Name. Um live mitzulesen, nimm log stream mit demselben Prädikat und beende es mit ctrl-C.

Normale logd-Last oder ein Problem

Normal: logd bleibt deutlich unter ein paar Prozent CPU, mit kurzen Anstiegen, wenn der Mac startet, aus dem Ruhezustand aufwacht oder viele Apps auf einmal öffnen.

Einen Blick wert: logd bleibt minutenlang weit oben in der CPU-Liste, oder sein Wert „Geschriebene Byte“ wächst schnell, obwohl du wenig tust. Das sind die üblichen Ursachen:

  • Ein Prozess, der in einer engen Schleife scheitert und es erneut versucht, etwa ein Netzwerk-Client, der seinen Server nicht erreicht, oder eine hängende Synchronisierung.
  • Ein Hilfsprozess, der abstürzt und sofort wieder gestartet wird und jedes Mal denselben Start und denselben Fehler protokolliert.
  • Debug- oder Info-Protokollierung, eingeschaltet mit log config oder durch ein Protokollierungsprofil, das für einen Fehlerbericht installiert wurde.
  • Eine App, in deren eigenen Einstellungen ausführliche Protokollierung eingeschaltet ist, oder eine Testversion einer App, die alles protokolliert.
  • Die Konsole, die noch live mitläuft, oder ein Tool, das ständig das Live-Protokoll liest. Diese Kosten zeigen sich vor allem bei diagnosticd, dem Begleiter von logd.

Das Protokoll in der Konsole lesen

Die Konsole unter „Programme“ → „Dienstprogramme“ zeigt dasselbe Protokoll in einem Fenster. Klicke in der Symbolleiste auf „Starten“, um Meldungen beim Eintreffen zu sehen, und gib einen Prozessnamen ins Suchfeld ein, um nur die Meldungen zu zeigen, die ihn erwähnen. Füllt ein Prozess den Bildschirm schneller, als du lesen kannst, hast du gefunden, womit logd beschäftigt ist.

Beende das Mitlesen, wenn du fertig bist. Solange die Konsole das Live-Protokoll zeigt, haben diagnosticd und die protokollierenden Prozesse zusätzliche Arbeit, also das Gegenteil dessen, was du auf einem ohnehin ausgelasteten Mac willst.

Häufige Fragen

Was ist logd auf dem Mac?

Der macOS-Prozess hinter dem einheitlichen Protokoll. Jede App und jeder Systemprozess sendet seine Protokollmeldungen an logd, der sie komprimiert und speichert, damit die Konsole und der Befehl log sie zeigen können.

Warum hat logd eine hohe CPU-Last?

Fast immer, weil ein anderer Prozess in einer Schleife Protokollmeldungen schreibt und logd sie alle speichern muss. Führe log stats --last 5m im Terminal aus, um zu sehen, welcher Prozess am meisten protokolliert.

Kann ich die Protokolle von logd löschen?

Das kannst du, aber selten gibt es einen Grund dafür. macOS löscht alte Meldungen von selbst, wenn der Protokollspeicher seine Größengrenze erreicht, er wächst also nicht endlos. Musst du ihn leeren, entfernt sudo log erase --all die gespeicherten Meldungen, samt dem Verlauf, den du oder der Apple Support zur Diagnose eines Problems bräuchtet. Lösche /var/db/diagnostics oder /var/db/uuidtext nicht von Hand.

Was ist diagnosticd auf dem Mac?

Ein weiterer Teil des einheitlichen Protokollsystems. logd speichert Meldungen, und diagnosticd liefert sie live an die Konsole und an log stream. Er braucht nur dann mehr CPU, wenn eines davon gerade das Live-Protokoll zeigt.

Kann ich logd gefahrlos beenden?

Es richtet keinen bleibenden Schaden an, weil macOS ihn sofort neu startet, bringt aber auch nichts. Der Prozess, der das Protokoll geflutet hat, macht weiter, und logd nimmt die Arbeit gleich nach dem Neustart wieder auf.

Verwandte Begriffe

Suchst du etwas Besseres als die Aktivitätsanzeige? Sieh dir die besten Alternativen zur Aktivitätsanzeige für den Mac an, oder stöbere durch alle Begriffe im Glossar.