Skip to content

Den Linux Bootvorgang mit systemd analysieren

Systemd läuft sys-v-init nach und nach den Rang hab. Das heißt bei der Untersuchung des Bootvorgangs können andere Wege gegangen werden und es muss nicht auf altbekannte Tools wie Bootcharts zurückgegriffen werden.

Systemd bringt ein eigenes Analysetool auf pythonbasis mit, welches ähnliche Möglichkeiten bietet.

Der Aufruf kann zunächst ohne Parameter getestet werden. Dieser liefert einen groben Überblick.

systemd-analyze

Startup finished in 7.239s (kernel) + 30.762s (userspace) = 38.001s

Das gleiche Ergebnis wirft auch der Parameter "time" aus.

Die Ausgabe gibt anders als auf den ersten Blick vermutet nicht den gesammten Bootvorgang wieder, sondern nur die Zeit zum Starten der Dienste und Co.

systemd-analyze-chain

Der Parameter "critical-chain" liefert hier schon einen detaillierten Blick auf mögliche Nachzügler.

systemd-analyze critical-chain

Eine Liste aller Units kann wie folgt ausgegeben werden.

systemd-analyze blame

systemd-analyze-blame

Um nun eine ähnliche grafische Ausgabe wie bei Bootcharts zu erhalten bietet systemd-analyze eine SVG Ausgabe. Diese kann mit einem herkömmlichen Browser geöffnet werden.

systemd-analyze plot > /home/itrig/systemd.svg

systemd-analyze-svg

Eine weitere grafische Ausgabe kann mit "dot" erzielt werden. Dabei werden die Abhängigkeiten aller Aufrufe dargestellt.

systemd-analyze dot | dot -Tsvg > /home/itrig/systemdplot.svg

Soll die Grafik auf einen Dienst beschränken werden, muss dieser einfach mit angegeben werden.

systemd-analyze dot 'docker*' |dot -Tsvg > /home/itrig/docker.svg

systemd-analyze-dot

Alle weiteren Befehle lassen sich mit "man" oder "help" einsehen.
 

systemd-analyze [OPTIONS...] {COMMAND} ...

Profile systemd, show unit dependencies, check unit files.

  -h --help               Show this help
     --version            Show package version
     --no-pager           Do not pipe output into a pager
     --system             Operate on system systemd instance
     --user               Operate on user systemd instance
  -H --host=[USER@]HOST   Operate on remote host
  -M --machine=CONTAINER  Operate on local container
     --order              Show only order in the graph
     --require            Show only requirement in the graph
     --from-pattern=GLOB  Show only origins in the graph
     --to-pattern=GLOB    Show only destinations in the graph
     --fuzz=SECONDS       Also print also services which finished SECONDS
                          earlier than the latest in the branch
     --man[=BOOL]         Do [not] check for existence of man pages

Commands:
  time                    Print time spent in the kernel
  blame                   Print list of running units ordered by time to init
  critical-chain          Print a tree of the time critical chain of units
  plot                    Output SVG graphic showing service initialization
  dot                     Output dependency graph in dot(1) format
  set-log-level LEVEL     Set logging threshold for manager
  set-log-target TARGET   Set logging target for manager
  dump                    Output state serialization of service manager
  verify FILE...          Check unit files for correctness