Analyse des Bootvorgangs mit systemd-analyze

Datum

Mit der Einführung von systemd ist für die Analyse des Bootvorgangs das in Python entwickelte systemd-analyze vorgesehen. Es sammelt diverse Statuswerte und statistische Informationen des systemd-Frameworks, um daraus eine vereinfachte, an bootchart erinnernde Liste oder aussagekräftige Grafiken zu erstellen.

Bootvorgang analysieren

Um eine erste Übersicht zu erhalten kann man prüfen wie viel Zeit insgesamt zum booten benötigt wurde (ohne weitere Einzelheiten)

$ systemd-analyze time
Startup finished in 2.904s (kernel) + 2.993s (userspace) = 5.898s

Hier lässt sich gut erkennen wie lange der Kernel und wie lange der Userspace zum booten benötigt hat.

weitere Optionen für systemd-analyze
  • time (Zeigt an, wie lange das System benötigt hat, bis der Userspace vollständig geladen und initialisiert war)
  • blame (Gibt eine Liste aller laufenden Units von systemd aus, sortiert nach der Zeit, die diese für die Initialisierung benötigt haben.)
  • critical-chain (Zeigt eine „zeitkritische“ Liste der laufenden Units an. Zeitkritisch heißt, dass die in der Liste weiter oben stehende Unit aufgrund von Abhängigkeiten erst gestartet werden konnte, wenn die tiefere Unit fertig initialisiert war.)
  • plot (Plottet den Systemstart als Diagramm im SVG-Format. Auf der X-Achse des Plots ist die Zeit aufgetragen, auf der Y-Achse die Units.)
  • dot (Generiert einen Abhängigkeitsgraphen der Units im dot-Format von Graphviz.)
  • dump (Gibt Zustand jeder geladenen Units im Detail aus. Da die Liste sehr lang ist – in der Regel mehrere zehntausend Zeilen – sollte die Ausgabe entweder in eine Datei umgeleitet oder direkt mit grep o.ä. gefiltert werden.)
  • verify (Überprüft die Korrektheit aller aktiven Units. Wenn zusätzlich eine Unit-Datei angegeben wird, wird nur diese und die zum Starten dieser Unit benötigten Units geprüft. Hierfür werden Root-Rechte benötigt.)
  • set-log-level (setzt das aktuelle log level des systemd-daemons auf den übergebenen Wert (LEVEL))

hier nun noch einige Beispiele:

  • blame (Gibt eine Liste aller laufenden Units von systemd aus, sortiert nach der Zeit, die diese für die Initialisierung benötigt haben.)
$  systemd-analyze blame 
         40.462s apt-daily-upgrade.service
         27.746s apt-daily.service
          9.559s lxd-containers.service
          8.988s NetworkManager-wait-online.service
          7.712s sav-protect.service
          3.497s plymouth-quit.service
          2.211s nscd.service
          2.194s ntp.service
          2.169s irqbalance.service
          2.143s gdomap.service
          2.137s apport.service
          2.133s ondemand.service
          2.132s atop.service
          1.137s lxd.service
           690ms console-setup.service
           600ms dev-mapper-kubuntu\x2d\x2dvg\x2droot.device
           562ms vmware-USBArbitrator.service
           480ms vboxdrv.service
           476ms lvm2-monitor.service
           395ms home-torsten-shares.mount
           392ms networking.service
           389ms accounts-daemon.service
           354ms snapd.service
           336ms lxd-bridge.service
           321ms ModemManager.service
           286ms grub-common.service
           236ms NetworkManager.service
           203ms upower.service
           203ms alsa-restore.service
           192ms rsyslog.service
           161ms apparmor.service
           130ms systemd-cryptsetup@cryptswap1.service
           117ms thermald.service
...
  • critical-chain (Zeigt eine „zeitkritische“ Liste der laufenden Units an. Zeitkritisch heißt, dass die in der Liste weiter oben stehende Unit aufgrund von Abhängigkeiten erst gestartet werden konnte, wenn die tiefere Unit fertig initialisiert war.)
$  systemd-analyze critical-chain
The time after the unit is active or started is printed after the "@" character.
The time the unit takes to start is printed after the "+" character.

graphical.target @14.344s
└─multi-user.target @14.344s
  └─nscd.service @10.823s +2.211s
    └─remote-fs.target @10.822s
      └─home-torsten-shares.mount @10.427s +395ms
        └─home-torsten.mount @27.777s
          └─local-fs-pre.target @677ms
            └─lvm2-monitor.service @201ms +476ms
              └─lvm2-lvmetad.service @240ms
                └─lvm2-lvmetad.socket @199ms
                  └─-.mount @165ms
                    └─system.slice @187ms
                      └─-.slice @165ms

Hierbei lassen sich auch einzelne Units betrachten:

$  systemd-analyze critical-chain networking.service
The time after the unit is active or started is printed after the "@" character.
The time the unit takes to start is printed after the "+" character.

networking.service +281ms
└─apparmor.service @1.912s +242ms
  └─local-fs.target @1.908s
    └─boot.mount @1.871s +36ms
      └─systemd-fsck@dev-disk-by\x2duuid-edc6d5ec\x2d4224\x2d4df2\x2d8546\x2d311141980b1f.service @1.290s +88ms
        └─dev-disk-by\x2duuid-edc6d5ec\x2d4224\x2d4df2\x2d8546\x2d311141980b1f.device @1.260s

  • plot (Plottet den Systemstart als Diagramm im SVG-Format. Auf der X-Achse des Plots ist die Zeit aufgetragen, auf der Y-Achse die Units.)

$ systemd-analyze plot > boot_analysis.svg

Autor
Kategorien Linux, Server

PRTG Map