Il comando systemd-analyze viene utilizzato per recuperare le statistiche sulle prestazioni per le operazioni di avvio. Il comando accetta uno o più sottocomandi che determinano il tipo di informazioni da stampare e come. Per la gestione dei processi e la risoluzione dei problemi, la colpa è il sottocomando più rilevante. Questo stamperà un elenco di tutte le unità di sistema che sono state eseguite all'avvio, insieme al tempo impiegato da ciascuna unità per l'esecuzione. Puoi utilizzare colpa systemd-analyze per identificare i servizi e altre unità che rallentano l'avvio del sistema.
Sintassi
La sintassi del comando systemd-analyze è:
# systemd-analyze [options] [subcommand]
Il comando systemd-analyze può essere utilizzato per trovare informazioni su quanto ogni servizio ha impiegato per avviarsi. systemd-analyze time può fornire informazioni generali sul tempo impiegato dal sistema per avviarsi. Ecco un comando che mostra chiaramente il tempo impiegato da kernel, initrd e userspace durante l'avvio.
# systemd-analyze time Startup finished in 1.267s (kernel) + 6.798s (initrd) + 1min 2.139s (userspace) = 1min 10.205s
Per scoprire quanto tempo ha impiegato ciascuna unità per avviarsi, esegui systemd-analyze incolpa.
# systemd-analyze blame 24.728s dev-mapper-centosx2droot.device 15.135s kdump.service 14.670s plymouth-quit-wait.service 14.210s firewalld.service 9.835s accounts-daemon.service 7.383s ModemManager.service 7.259s libvirtd.service 7.257s systemd-logind.service 7.177s ksm.service 7.081s gssproxy.service 7.067s avahi-daemon.service 7.062s rsyslog.service 7.039s abrt-ccpp.service
Come puoi vedere, l'output è ordinato in base al tempo impiegato da ciascuna unità, puoi facilmente scoprire quale servizio sta impiegando più tempo durante l'avvio e puoi approfondire per analizzare il problema.
In determinati passaggi, l'avvio non può procedere finché tutte le dipendenze per l'unità non sono soddisfatte. Per vedere le unità in questi punti critici, esegui systemd-analyze critical-chain.
# 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 @1min 2.102s └─multi-user.target @1min 2.102s └─abrt-vmcore.service @1min 1.228s +872ms └─kdump.service @46.090s +15.135s └─remote-fs.target @46.086s └─remote-fs-pre.target @46.083s └─iscsi-shutdown.service @45.951s +99ms └─network.target @45.944s └─network.service @44.959s +975ms └─NetworkManager.service @38.653s +689ms └─firewalld.service @24.439s +14.210s └─basic.target @23.850s └─sockets.target @23.849s └─cups.socket @23.847s └─sysinit.target @23.618s └─systemd-update-utmp.service @23.603s +13ms └─auditd.service @22.959s +643ms └─systemd-tmpfiles-setup.service @22.726s +230ms └─rhel-import-state.service @22.431s +294ms └─local-fs.target @22.428s └─boot.mount @19.675s +2.126s └─dev-disk-byx2duuid-7de2053cx2d44d7x2d4f33x2db522x2d81dee2f6b69b.device @19.652s
È possibile tracciare un'immagine grafica SVG che contiene dettagli sull'ora di inizio dei servizi di sistema, evidenziando il tempo speso per l'inizializzazione. Assicurati di aver abilitato la modalità di visualizzazione grafica o di aver abilitato x-windows per vedere il grafico.
# systemd-analyze plot > plot.svg # eog plot.svg
Ecco uno snip dal grafico di esempio sulla mia macchina CentOS 7. Ingrandisci per controllare chiaramente la cascata.
Esempi di comando systemd-analyze
1. Elenca il tempo di avvio di ciascuna unità:
# systemd-analyze blame
2. Stampa un albero della catena di unità tempo-critica:
# systemd-analyze critical-chain
3. Crea un file SVG che mostri l'avvio di ciascun servizio di sistema, evidenziando il tempo speso per l'inizializzazione:
# systemd-analyze plot > path/to/file.svg
4. Traccia un grafico delle dipendenze e convertilo in un file SVG:
# systemd-analyze dot | dot -Tsvg > path/to/file.svg
5. Mostra i punteggi di sicurezza delle unità in esecuzione:
# systemd-analyze security