Was nützt systemd-journal-flush.service?

14

Es verlangsamt meine Systemstartzeit.

Kann ich es deaktivieren?

Was passiert, wenn ich es beim Booten deaktiviere?

Ich benutze Ubuntu Version 18.04.

vivek
quelle

Antworten:

12

Der systemd-journal-flush.serviceJournal-Daemon wird aufgefordert, alle in / run / log / journal gespeicherten Protokolldaten in / var / log / journal zu löschen, wenn der persistentSpeicher aktiviert ist. Wenn Sie (bereits) große Protokolldateien haben, führt dies zu einem langsameren Booten. Außerdem muss die Festplatte (mit /var/log) dazu in einem beschreibbaren Modus bereitgestellt werden.

Um es zusammenzufassen: Riesige alte Protokolldateien, die beim Booten überprüft werden, und das Anhängen neuer Protokolldaten führen zu einer langsameren Startzeit.

So überprüfen Sie den Journalctl-Protokollgrößentyp

journalctl --disk-usage

Geben Sie den folgenden Befehl ein, um Informationen zu Zeit und Speicherplatz der Flush-Verarbeitung abzurufen

journalctl -b --unit systemd-journald

Die entsprechende Ausgabe sieht so aus

-- Logs begin at Sat 2018-12-08 00:40:23 CET, end at Mon 2018-12-10 19:40:27 CET. --
Dec 10 12:51:38 ubuntu01 systemd-journald[479]: Journal started
Dec 10 12:51:38 ubuntu01 systemd-journald[479]: Runtime journal (/run/log/journal/265c93c062bf4c8da41abfe2ae793452) is 4.7M, max 38.3M, 33.5M free.
Dec 10 12:51:38 ubuntu01 systemd-journald[479]: Time spent on flushing to /var is 7.066904s for 132 entries.
Dec 10 12:51:38 ubuntu01 systemd-journald[479]: System journal (/var/log/journal/265c93c062bf4c8da41abfe2ae793452) is 128.0M, max 256.0M, 128M free.


Du kannst entweder

  • Deaktivieren Sie den Dienst (nicht empfohlen)

    Dann ist es möglich, dass nicht alle Protokolldaten auf die Festplatte geschrieben werden. ärgerlich beim Debuggen von Bootfehlern.


  • Verwenden Sie einen journalctl --vacuumBefehl

    Von journalctl -h

    --vacuum-size = BYTES Reduzieren Sie die Festplattennutzung unter die angegebene Größe.
    --vacuum-files = INT Belassen Sie nur die angegebene Anzahl von Journaldateien.
    --vacuum-time = TIME Entfernen Sie Journaldateien, die älter als die angegebene Zeit sind

    Also mach a

     sudo journalctl --vacuum-size=1G --vacuum-time=5d --vacuum-files=5
    


  • Speichertyp ändern von systemd-journal-flush.service

    Überprüfen Sie zuerst Ihren Speichertyp mit

     systemctl cat systemd-journal-flush.service  | grep -i storage
    

    Von man journald.conf

    Speicher =

    Steuert, wo Journaldaten gespeichert werden sollen. Eine von "flüchtig", "persistent", "auto" und "keine".

    Bei " flüchtig " werden Journalprotokolldaten nur im Speicher gespeichert, dh unterhalb der Hierarchie / run / log / journal (die bei Bedarf erstellt wird).

    Bei " persistent " werden die Daten vorzugsweise auf der Festplatte gespeichert, dh unterhalb der Hierarchie / var / log / journal (die bei Bedarf erstellt wird), mit einem Fallback auf / run / log / journal (die bei Bedarf erstellt wird) vorzeitiger Start und wenn die Festplatte nicht beschreibbar ist.

    " auto " ähnelt "persistent", aber das Verzeichnis / var / log / journal wird bei Bedarf nicht erstellt, sodass seine Existenz steuert, wohin die Protokolldaten gehen.

    " none " schaltet den gesamten Speicher aus, alle empfangenen Protokolldaten werden gelöscht. Die Weiterleitung an andere Ziele wie die Konsole, den Kernel-Protokollpuffer oder einen Syslog-Socket funktioniert jedoch weiterhin. Der Standardwert ist "auto".

    Bearbeiten Sie die Datei

    sudo nano /etc/systemd/journald.conf
    

    Im Journalbereich auskommentieren und ändern:

    Storage=auto
    SystemMaxFileSize=1G
    SystemMaxFiles=5
    

    Speichern und neu starten.


abu_bua
quelle
Ich verstehe nicht, warum eine riesige Protokolldatei den Start verlangsamen würde. es löscht das Protokoll in / run / log / journal, aber das ist nur das Protokoll seit dem letzten Start
solsTiCe
1
Ich bin mir nicht ganz sicher. Dies kann auch die (nutzlose?) Abhängigkeit von systemd-user-session-flush.service von systemd-user-session.service sein (siehe: //github.com/systemd/systemd/pull/10502). Ich habe jedoch festgestellt, dass die Begrenzung der Protokolldatei auf weniger als 1 GB die Startzeit beschleunigt. Ich habe den Code systemd / journal / * gelesen, fand aber etw nicht interessant.
abu_bua
1
Möglicherweise aufgrund von De- / Komprimierung (lz4)? Weitere Protokolldaten werden nicht einfach in die Datei gestreamt. es wird aufgezeichnet und eine Hash-Tabelle für die schnellere Suche geändert, Objekte, ...
abu_bua
1
Ich denke, ein Kommentar darüber, wie sich die Journaldateien und / var / log-Dateien verhalten, könnte nützlich sein. Ich bin mir nicht sicher, aber es scheint mir, dass das Journal aktiv protokolliert wird und wenn es geleert wird, schreibt es die aktiven Daten in die normalen / var / log-Dateien auf die Festplatte?
pbhj
Sie haben Recht, aber beim Booten können keine Daten auf die Festplatte geschrieben werden, da die Festplatte zuerst gemountet werden muss.
abu_bua
3

Laut diesem Beitrag von der Systemd-Entwickler-Homepage können Sie das Problem beheben, indem Sie die Unit-Datei ändern .

Öffnen Sie dazu /lib/systemd/system/systemd-journal-flush.servicezB

sudo vim /lib/systemd/system/systemd-journal-flush.service

und ändern Sie die Vorher-Abhängigkeit von

 Before=systemd-user-sessions.service systemd-tmpfiles-setup.service

 bis

 Before=systemd-tmpfiles-setup.service

Dieser Fix wird automatisch für systemd-Versionen>  v240 geändert.

Vergessen Sie nicht, die Datei zu speichern.

abu_bua
quelle