¿El arranque de Linux es lento? Encuentra los cuellos de botella con systemd-analyze y optimízalos en 3 minutos

Resumen

Si el tiempo de inicio de tu servidor o PC con Linux tarda más de lo habitual, es necesario identificar la causa y reducir los retrasos innecesarios. Con el comando systemd-analyze, puedes medir fácilmente el tiempo total de arranque, rastrear los servicios del sistema que generan cuellos de botella e incluso validar los archivos de unidad. En este artículo, abordamos comandos clave de análisis y técnicas de optimización de rendimiento listos para aplicar en entornos reales.

1. Verificación del tiempo de arranque y medición de retrasos por secciones (time & blame)

El comando systemd-analyze mide y muestra el tiempo total transcurrido durante el proceso de arranque, así como el tiempo de inicialización del kernel y del espacio de usuario (userspace).
En el resultado de la ejecución, se puede confirmar que tomó un total de 315ms hasta que el sistema completó el inicio y alcanzó el entorno GUI en graphical.target.
⚙️ [Opciones principales]

time : Muestra el tiempo total consumido por el kernel y el espacio de usuario durante el arranque (comportamiento predeterminado).
blame : Muestra la lista de servicios que causaron demoras en el arranque durante la inicialización, ordenados de forma descendente por tiempo consumido.
critical-chain : Muestra el árbol de dependencias de servicios de la ruta crítica (cadena crítica en tiempo) que provoca demoras en el inicio.
plot : Genera una línea de tiempo gráfica de la ejecución de cada servicio a lo largo de todo el proceso de arranque en formato SVG.
dot : Genera las relaciones de dependencia entre servicios en formato Graphviz dot.

systemd-analyze

El comando systemd-analyze blame | head -n 10 ordena de forma descendente y permite verificar los 10 servicios principales cuyo tiempo de inicialización fue el más prolongado durante el arranque.
En el resultado de la ejecución, se observa que systemd-resolved.service (68ms) y ldconfig.service (67ms) fueron los que consumieron más tiempo en el proceso de inicialización del arranque.

systemd-analyze blame | head -n 10

2. Seguimiento de la ruta crítica en las demoras de arranque (critical-chain)

El comando systemd-analyze critical-chain imprime el árbol de dependencias (ruta crítica) de los servicios que influyeron directamente en la finalización del arranque del sistema.
En la salida, el texto después del símbolo @ indica el momento en que la unidad se activó o inició, y el valor después del símbolo + representa el tiempo que tardó en ejecutarse dicha unidad por sí misma.
Al observar el árbol resultante, se comprueba que para llegar a graphical.target (315ms), servicios como systemd-resolved.service (68ms) y systemd-journald.service (39ms) se encadenaron en serie, formando la ruta crítica de cuello de botella que causó la demora general del inicio.

systemd-analyze critical-chain

El comando systemd-analyze critical-chain networking.service rastrea de forma selectiva la cadena crítica hasta que un servicio específico (en este caso, networking.service) se inicia.
Resulta muy útil cuando se desea aislar y analizar únicamente las dependencias de cuello de botella de un servicio de red o backend concreto, en lugar de toda la ruta del sistema.

systemd-analyze critical-chain networking.service

3. Generación de un informe SVG visual de la línea de tiempo de arranque (plot)

Para almacenar y gestionar de forma ordenada los archivos de informes de análisis de arranque, ejecutamos el comando mkdir -p ~/systemd-reports para crear un directorio dedicado.

mkdir -p ~/systemd-reports

El comando systemd-analyze plot > ~/systemd-reports/boot-analysis.svg genera y guarda un archivo gráfico SVG con una línea de tiempo visual que muestra el punto de inicio y la duración de la ejecución de cada servicio ejecutado durante todo el arranque.
Permite identificar de manera intuitiva el flujo de ejecución paralela y los tramos de demora entre servicios mediante un gráfico visual, algo difícil de apreciar únicamente con registros de texto.

systemd-analyze plot > ~/systemd-reports/boot-analysis.svg

El comando ls -lh ~/systemd-reports/boot-analysis.svg comprueba la existencia del archivo de informe SVG generado y detalles como su tamaño (59KB).
El archivo SVG generado puede abrirse en un navegador web o visor de imágenes para analizar visualmente el gráfico detallado de la línea de tiempo de arranque.

ls -lh ~/systemd-reports/boot-analysis.svg

4. Validación de errores de configuración y estado de seguridad de unidades de servicio (verify & security)

El comando sudo systemd-analyze verify /lib/systemd/system/ssh.service valida de antemano si existen errores sintácticos u omisiones de configuración en el archivo de unidad especificado.
Que no se muestre ningún mensaje en la salida indica que el archivo de unidad del servicio no presenta defectos sintácticos ni errores de configuración.

sudo systemd-analyze verify /lib/systemd/system/ssh.service

El comando systemd-analyze security ssh.service diagnostica los ajustes de aislamiento de seguridad y el nivel de exposición del sistema (Security Exposure) de la unidad de servicio indicada.
A través del resultado de la ejecución, se puede revisar detalladamente el estado de aplicación de parámetros de seguridad clave, como la ejecución con privilegios de root (User=), el control de acceso a dispositivos (PrivateDevices=) y la prevención de escalada de privilegios (NoNewPrivileges=), junto con la puntuación de exposición a riesgos.

systemd-analyze security ssh.service

Hasta aquí hemos revisado de forma concisa cómo utilizar el comando systemd-analyze para identificar y optimizar los servicios que actúan como cuellos de botella en el arranque.
Depura los servicios innecesarios y disfruta de un entorno de arranque de Linux mucho más fluido y veloz.