Do czego służy systemd-journal-flush.service?

14

Spowalnia czas uruchamiania systemu.

Czy mogę to wyłączyć?

Co się stanie, jeśli wyłączę go podczas uruchamiania?

Używam Ubuntu w wersji 18.04.

vivek
źródło

Odpowiedzi:

14

systemd-journal-flush.servicePyta demona czasopism, aby wypłukać wszelkie dane zapisane w dzienniku / run / log / dzienniku w / var / log / dzienniku, jeżeli persistentprzechowywanie jest włączony. Jeśli masz (już) ogromne pliki dziennika, spowoduje to wolniejsze uruchamianie. Ponadto dysk (z /var/log) musi być zamontowany w trybie zapisu.

Podsumowując: ogromne stare pliki dziennika, które są sprawdzane podczas rozruchu, a dołączanie nowych danych dziennika powoduje wolniejszy czas uruchamiania.

Aby sprawdzić typ rozmiaru dziennika Journalctl

journalctl --disk-usage

Aby uzyskać informacje o czasie i miejscu na dysku podczas przetwarzania opróżniania, wprowadź następujące polecenie

journalctl -b --unit systemd-journald

Odpowiednie wyjście będzie wyglądać

-- 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.


Możesz albo

  • Wyłącz usługę (niezalecane)

    Możliwe jest, że nie wszystkie dane dziennika zostaną zapisane na dysku; denerwujące podczas debugowania błędów rozruchu.


  • Użyj journalctl --vacuumpolecenia

    Od journalctl -h

    --vacuum-size = BYTES Zmniejsz użycie dysku poniżej określonego rozmiaru
    --vacuum-files = INT Pozostaw tylko określoną liczbę plików dziennika
    --vacuum-time = CZAS Usuń pliki dziennika starsze niż określony czas

    Dlatego zrób

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


  • Zmień typ przechowywania systemd-journal-flush.service

    Najpierw sprawdź typ magazynu za pomocą

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

    Od man journald.conf

    Storage =

    Kontroluje, gdzie przechowywać dane dziennika. Jeden z „niestabilnych”, „trwałych”, „automatycznych” i „brak”.

    Jeśli jest „ niestabilny ”, dane dziennika będą przechowywane tylko w pamięci, tj. Poniżej hierarchii / run / log / journal (która jest tworzona w razie potrzeby).

    Jeśli „ trwałe ”, dane będą przechowywane najlepiej na dysku, tj. Poniżej hierarchii / var / log / journal (która jest tworzona w razie potrzeby), z możliwością powrotu do / run / log / journal (która jest tworzona w razie potrzeby), podczas wczesny rozruch i jeśli dysku nie można zapisać.

    auto ” jest podobne do „trwałego”, ale katalog / var / log / journal nie jest tworzony w razie potrzeby, więc jego istnienie kontroluje, gdzie idą dane dziennika.

    none ” wyłącza całą pamięć, wszystkie otrzymane dane dziennika zostaną usunięte. Przekazywanie do innych obiektów docelowych, takich jak konsola, bufor dziennika jądra lub gniazdo syslog będzie jednak nadal działać. Domyślnie „auto”.

    Edytuj plik

    sudo nano /etc/systemd/journald.conf
    

    W sekcji czasopisma odkomentuj i zmień:

    Storage=auto
    SystemMaxFileSize=1G
    SystemMaxFiles=5
    

    Zapisz i uruchom ponownie.


abu_bua
źródło
Nie rozumiem, dlaczego ogromny plik dziennika spowalnia rozruch? opróżnia dziennik / run / log / journal, ale to tylko dziennik od ostatniego uruchomienia
solsTiCe
1
Nie jestem absolutnie pewien. Może to być także (bezużyteczna?) Zależność systemd-user-session-flush.service od systemd-user-session.service (patrz https://github.com/systemd/systemd/pull/10502). Doświadczyłem jednak, że ograniczenie pliku dziennika do mniej niż 1 GB skraca czas uruchamiania. Przeczytałem kod systemd / journal / *, ale nie uważałem tego za interesujące.
abu_bua
1
Może z powodu de- / kompresji (lz4)? Dalsze dane dziennika nie są po prostu przesyłane strumieniowo do pliku; dostaje dziennik i zmodyfikowano tabelę skrótów do szybszego wyszukiwania, obiekty, ...
abu_bua
1
Myślę, że przydatny może być komentarz dotyczący relacji plików dziennika i plików / var / log; Nie jestem tego pewien, ale wydaje mi się, że dziennik jest aktywny, a kiedy jest opróżniany, zapisuje aktywne dane na dysk w normalnych plikach / var / log?
pbhj,
masz rację, ale podczas uruchamiania danych nie można zapisać na dysk, ponieważ dysk musi być najpierw podłączony.
abu_bua,
3

Zgodnie z tym postem ze strony systemowej programisty można to naprawić, zmieniając plik Unit .

Aby to zrobić, otwórz /lib/systemd/system/systemd-journal-flush.servicenp

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

i zmień zależność Przed z

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

 do

 Before=systemd-tmpfiles-setup.service

Ta poprawka zostanie automatycznie zmieniona dla wersji systemowych>  v240.

Nie zapomnij zapisać pliku.

abu_bua
źródło