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