systemd-analyze peut être utilisé pour déterminer les statistiques de performance au démarrage du système et récupérer d’autres informations sur l’état et le suivi du système et du gestionnaire de services, ainsi que pour vérifier l’exactitude des fichiers unitaires.
Dans ce tutoriel, je vous montre comment mesurer le temps de démarrage Linux et trouver ce qui allonge le démarrage de votre appareil avec system-analyse afin de l’optimiser.
Table des matières
Introduction
Lorsqu’un système Linux est démarré, le processus de démarrage est géré par systemd. La première étape du processus de démarrage consiste à charger le noyau Linux, qui est le cœur du système d’exploitation. Une fois le noyau chargé, il initialise le matériel, puis lance le processus systemd, qui est le premier processus à s’exécuter sur le système.
À partir de là, systemd prend le relais et commence à lancer les autres services système nécessaires à la mise en route du système. Il s’agit notamment du service de mise en réseau, du gestionnaire de connexion et de tout autre service nécessaire au fonctionnement du système. Systemd démarre ces services en parallèle, plutôt que de manière séquentielle comme avec le système init traditionnel, ce qui permet au système de démarrer plus rapidement et d’être plus réactif.
Une fois que tous les services nécessaires ont été lancés, le système est prêt à être utilisé et le gestionnaire de connexion s’affiche, permettant à l’utilisateur de se connecter et de commencer à utiliser le système. Systemd continue de fonctionner en arrière-plan, en gérant et en contrôlant les services du système en fonction des besoins. Cela permet au système de rester stable et réactif même lorsque les services du système sont démarrés, arrêtés ou modifiés.
Comment mesurer le temps de démarrage Linux
Cette commande affiche le temps passé dans le noyau avant que l’espace utilisateur ne soit atteint, le temps passé dans l’initrd avant que l’espace utilisateur du système normal ne soit atteint, et le temps que l’espace utilisateur du système normal a pris pour s’initialiser.
Notez que ces mesures ne font que mesurer le temps passé jusqu’au moment où tous les services du système ont été lancés, mais pas nécessairement jusqu’à ce qu’ils aient terminé leur initialisation ou jusqu’à ce que le disque soit inactif.
systemd-analyze
Le temps de démarrage s’affiche de la manière suivante = 1min 10.363s
Startup finished in 6.324s (firmware) + 13.418s (loader) + 36.079s (kernel) + 14.541s (userspace) = 1min 10.363s
graphical.target reached after 14.488s in userspace.
Mesurer le temps de démarrage de chaque service (unit) Linux
Pour connaître le temps de démarrage de chaque unit, ajoutez l’option critical-chain comme ceci :
systemd-analyze critical-chain
Cela imprime un arbre de la chaîne d’unités critiques en termes de temps (pour chacune des unités spécifiées ou pour la cible par défaut dans le cas contraire).
L’heure à laquelle l’unité est active ou démarrée est imprimée après le caractère « @ ». Le temps nécessaire au démarrage de l’unité est imprimé après le caractère « + »
graphical.target @14.488s
└─multi-user.target @14.488s
└─plymouth-quit-wait.service @11.175s +3.310s
└─systemd-user-sessions.service @11.165s +6ms
└─[email protected] @11.135s +28ms
└─network-online.target @11.080s
└─NetworkManager-wait-online.service @6.029s +5.049s
└─NetworkManager.service @3.863s +2.149s
└─dbus.service @3.767s +92ms
└─basic.target @3.758s
└─sockets.target @3.758s
└─libvirtd-ro.socket @3.758s
└─libvirtd.socket @3.756s +1ms
└─sysinit.target @3.751s
└─systemd-resolved.service @3.667s +84ms
└─systemd-tmpfiles-setup.service @2.626s +1.024s
└─local-fs.target @2.617s
└─run-snapd-ns.mount @12.341s
└─swap.target @1.015s
└─dev-zram0.swap @3.865s
└─dev-zram0.device @3.834s
Créer un graphique d’analyse du processus de démarrage
L’utilitaire system-analyse peut aller encore plus loin en générant un graphique SVG, détaillant quels services système ont été démarrés à quelle heure, en mettant en évidence le temps qu’ils ont passé à l’initialisation, soit des données temporelles brutes au format JSON ou tableau. l’initialisation, soit les données temporelles brutes au format JSON ou tableau.
Pour créer un graphique SVG détaillant les services du système qui ont été démarrés et à quel moment, en indiquant le temps total passé à l’initialisation.
systemd-analyze plot >/tmp/bootup.svg
Cette commande génère un arbre de dépendance graphique. ne soit passé, le graphique généré graphique généré montrera à la fois les dépendances d’ordre et les dépendances d’exigences.
sudo apt install graphviz
systemd-analyze dot | dot -Tsvg > /tmp/systemd-boot-gv-system.svg
Ajoutez les options –order ou –require
Obtenir les détails complet de chaque démarrage unit
Sans paramètre, cette commande produit une sérialisation (généralement très longue) lisible par l’homme de l’état complet du gestionnaire de service. Un modèle peut être spécifié, ce qui limite la sortie aux unités dont le nom correspond à l’un des motifs. Le format de sortie est sujet à des Le format de sortie est susceptible d’être modifié sans préavis et ne doit pas être analysé par les applications. Cette commande est limitée en taux pour les utilisateurs non privilégiés.
Trouver ce qui ralentit le démarrage du système
Cette commande permet d’afficher une liste de toutes les unités en fonctionnement, classées en fonction du temps qu’il leur a fallu pour s’initialiser. Ces informations peuvent être utilisées pour optimiser les temps de démarrage.
systemd-analyze blame
systemd-analyze blame
1min 22.645s fstrim.service
24.437s apt-daily.service
14.743s apt-daily-upgrade.service
6.510s systemd-suspend.service
5.049s NetworkManager-wait-online.service
3.310s plymouth-quit-wait.service
2.677s nvidia-suspend.service
2.149s NetworkManager.service
1.093s uml-utilities.service
1.050s systemd-binfmt.service
1.031s apparmor.service
1.024s systemd-tmpfiles-setup.service
930ms boot-efi.mount
836ms logrotate.service
752ms docker.service
668ms fwupd.service
528ms udisks2.service
449ms apport.service
300ms dev-nvme0n1p5.device
257ms [email protected]
230ms man-db.service
224ms gpu-manager.service
186ms systemd-udev-trigger.service
180ms accounts-daemon.service
180ms systemd-fsck@dev-disk-by\x2duuid-196c2ab8\x2d7e5b\x2d4979\x2dbb98\x2dc1b940e8a2d2.service
171ms gnome-remote-desktop.service
168ms media-mak-DATA.mount
165ms rsyslog.service
161ms nmbd.service
160ms power-profiles-daemon.service
Si une unité systemd dépend d’une autre unité, elle doit attendre que cette dernière soit activée avant de s’exécuter – ces retards peuvent entraîner une sous-utilisation des ressources du système. L’utilitaire ‘systemctl list-dependencies’ peut fournir des informations sur les dépendances d’une unité, comme indiqué ci-dessous. Cela vous permet de comprendre de quoi dépend un service et ce qui en dépend.
systemctl list-dependencies <nom du service>
Vous pouvez alors désactiver les services non essentiels :
systemctl disable <nom du service>
systemctl mask <nom du service>
Les services non essentiels de Linux qui peuvent être désactivés du démarrage
Service | À quoi ça sert | Peut-on le désactiver ? |
bluetooth.service | Gère le Bluetooth | Si vous n’utilisez pas d’appareil Bluetooth |
ModemManager.service | Pour les modems 3G/4G USB | Sûr sur la plupart des PC |
cups.service | Impression / imprimantes réseau | Si vous n’imprimez |
avahi-daemon.service avahi-daemon.socket | Découverte réseau (Bonjour, AirPrint) | Désactivable si pas d’imprimante ni de réseau local spécifique |
whoopsie.service | Envoie les rapports de crash à Ubuntu | Sans effet sur le système |
apport.service | Rapports d’erreur locaux | Dans le cas où vous n’avez pas besoin de diagnostic automatique |
snapd.service | Gère les applications Snap | Peut être désactivé si vous n’utilisez pas de paquets Snap du tout (ex. : tu préfères Flatpak/Deb) |
speech-dispatcher.service | Synthèse vocale (accessibilité) | Sauf si besoin d’assistance vocale |
[email protected] | Wi-Fi filaire sur interface Ethernet | Si vous n’êtes uniquement en Ethernet (et vice-versa) |
Commandes de system-analyse
Commande | Description |
time | Indique le temps nécessaire au système pour que l’espace utilisateur soit entièrement chargé et initialisé (= jusqu’à ce que le système puisse être « utilisé »). La sortie est divisée en firmware, loader (= chargement de l’initrd), kernelanduserspace |
blame | Produit une liste de toutes les unités de systemd en cours d’exécution, triées en fonction du temps dl’initialisation. |
critical-chain | Indique le temps nécessaire au système pour que l’espace utilisateur soit entièrement chargé et initialisé (= jusqu’à ce que le système puisse être « utilisé »). La sortie est divisée en firmware, loader (= chargement de l’initrd), kernelanduserspace |
plot | Trace les débuts du système sous la forme d’un diagramme au format SVG. Le temps est indiqué sur l’axe X du graphique et les unités sur l’axe Y. La sortie doit être directe dans un fichier redirigé vers, par exemple systemd-analyze plot > graph.svg. |
dot | Génère un graphe de dépendance des unités au format point de Graphviz. |
dump | Affiche en détail l’état de chaque unité chargée. Comme la liste est très longue – généralement plusieurs dizaines de milliers de lignes – la sortie doit être redirigée vers un fichier ou filtrée directement avec grep ou quelque chose de similaire. |
verify [unitédate] | Vérifie l’exactitude de toutes les unités actives. Si un fichier d’unité est également spécifié dans UNITDATEI, seules cette unité et les unités nécessaires au démarrage de cette unité sont vérifiées. Pour ce faire, des droits d’accès à la racine sont requis. |
Liens
- Commande PS : lister les processus sur Linux
- Linux : exécuter des commandes en arrière-plan
- Commande Nohup sur Linux : utilisations et exemples
- Commande jobs, fg et bg sur Linux : utilisations et exemples
- Top : lister les processus sur Linux
- Utiliser la commande Kill, Killall, pkill pour arrêter un processus sur Linux
- Comment utiliser les commandes nice et renice sur Linux pour définir des priorités de processus
- Comment trouver et tuer un processus Zombie sur Linux (Defunct)
- 6 exemples d’utilisation de la commande Kill sur Linux
- Qu’est-ce que le load average sur Linux
- Mesurer le débit et lister les connexions réseaux sur Linux
- La mémoire sur Linux : comment ça marche
- PID (Process IDentifier) : l’identifiant des processus
- VMStat : Mesures de performance Linux