systemd-analyse: busque estadísticas de rendimiento de arranque del sistema en Linux


¿Está utilizando systemd system y service manager, y su sistema Linux tarda más en arrancar o simplemente desea ver los informes del rendimiento de arranque de su sistema? Si es así, ha aterrizado en el lugar correcto.

En este artículo, le mostraremos cómo analizar las estadísticas de rendimiento de arranque de un sistema Linux utilizando systemd-analyse, una de las numerosas utilidades de systemd para la gestión del sistema.

Para obtener una descripción general del tiempo de inicio del sistema, podemos ejecutar el comando systemd-analyse sin ningún argumento de la siguiente manera. Enumerará información sobre cuánto tiempo tardó cada servicio en iniciarse, lo que incluye el tiempo que tarda el kernel, initrd y el espacio de usuario durante el arranque.

# systemd-analyze

Startup finished in 884ms (kernel) + 3.861s (initrd) + 48.356s (userspace) = 53.102s

Si desea ver una lista de todas las unidades en ejecución, ordenadas por el tiempo que tardaron en inicializarse (el tiempo más alto en la parte superior), el subcomando de culpa se utiliza para este propósito. Después de ejecutar el comando que sigue, use [Enter] para ver más servicios en la lista y q para salir.

# systemd-analyze blame 
         16.159s mariadb.service
         12.178s libvirtd.service
         10.298s tuned.service
          9.836s postfix.service
          8.704s lsws.service
          7.352s lscpd.service
          4.988s [email protected]
          4.779s NetworkManager-wait-online.service
          4.577s lvm2-monitor.service
          4.439s ModemManager.service
          4.413s polkit.service
          4.280s dev-sda1.device
          4.225s systemd-udev-settle.service
          3.957s firewalld.service
          3.227s rhel-dmesg.service
          3.221s abrt-ccpp.service
          3.142s rsyslog.service
          3.053s avahi-daemon.service
          3.042s pure-ftpd.service
          2.249s gssproxy.service
          2.212s NetworkManager.service
          1.889s proc-fs-nfsd.mount
          1.780s systemd-tmpfiles-setup-dev.service
          1.451s sshd.service
          1.267s rhel-readonly.service
          1.035s sysstat.service
          1.001s rpc-statd-notify.service
           910ms systemd-logind.service
           739ms kdump.service
           738ms network.service
...

Como puede ver en el resultado anterior, cada unidad se clasifica en función del tiempo necesario, simplemente puede averiguar qué servicio está tardando más en arrancar y analizar el problema.

A continuación, también podemos ver un árbol de la cadena de tiempo crítico para el objetivo predeterminado o una lista de unidades especificadas con el subcomando de cadena crítica como se muestra.

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

multi-user.target @48.342s
└─mariadb.service @31.560s +16.159s
  └─network.target @31.558s
    └─network.service @30.819s +738ms
      └─NetworkManager-wait-online.service @26.035s +4.779s
        └─NetworkManager.service @23.821s +2.212s
          └─network-pre.target @23.821s
            └─firewalld.service @19.863s +3.957s
              └─polkit.service @15.381s +4.413s
                └─basic.target @12.271s
                  └─sockets.target @12.271s
                    └─virtlockd.socket @12.270s
                      └─sysinit.target @12.251s
                        └─systemd-update-utmp.service @12.196s +54ms
                          └─auditd.service @11.705s +486ms
                            └─systemd-tmpfiles-setup.service @11.609s +93ms
                              └─rhel-import-state.service @11.397s +211ms
                                └─local-fs.target @11.363s
                                  └─run-user-0.mount @46.910s
                                    └─local-fs-pre.target @10.575s
                                      └─lvm2-monitor.service @5.996s +4.577s
                                        └─lvm2-lvmetad.service @7.376s
                                          └─lvm2-lvmetad.socket @5.987s
                                            └─-.slice
# systemd-analyze critical-chain ntp.service networking.service

Finalmente, veamos un subcomando más importante que permite producir detalles gráficos (formato svg) de los servicios del sistema que se han iniciado, y en qué momento, resaltando su tiempo de inicialización, de la siguiente manera.

Asegúrese de que el modo de visualización gráfica o x-windows esté habilitado para ver el gráfico.

# systemd-analyze plot > boot_analysis.svg
# xviewer boot_analysis.svg  

Todos los comandos anteriores imprimirán las estadísticas de rendimiento de arranque de la máquina local. Para ver información de un host remoto a través de ssh, use la marca -H y especifique la directiva [email protected], como se muestra.

# systemd-analyze time -H [email protected]
# systemd-analyze blame -H [email protected]
# systemd-analyze critical-chain -H [email protected]

systemd-analyse también se puede utilizar para encontrar otra información de seguimiento y estado del sistema y systemd (administrador de servicios) y más. Para obtener más información, consulte su página de manual.

# man systemd-analyze 

¡Eso es todo por ahora! Si tiene alguna pregunta o desea compartir, utilice el formulario de comentarios a continuación para comunicarse con nosotros.