- En partant de l’écran htop d’Ubuntu Server 16.04 x64, suit via
/procet la sortie de commandes ce que signifient réellement uptime, load average, Tasks, PID, l’arborescence des processus, l’état, le temps CPU, la priorité et les indicateurs mémoire - Beaucoup de valeurs affichées proviennent de procfs et de fichiers système comme
/etc/passwd,/etc/group,/etc/shadowou/etc/nsswitch.conf, etstracepermet de vérifier quels fichiers le programme lit - Le load average n’est pas la même chose que le taux d’utilisation du CPU ; c’est une moyenne mobile à décroissance exponentielle qui inclut les processus en cours d’exécution, ceux en attente d’exécution et ceux en état uninterruptible
- Les codes d’état comme
R,S,D,Z,Tettsont liés au fonctionnement des signaux, dekill, defork/exec/wait, et donnent des indices pour comprendre pourquoi un processus est arrêté ou reste présent VIRT,RES,SHRetMEM%montrent la mémoire virtuelle, la mémoire physique et la mémoire partageable sous des angles différents ; il est donc difficile de conclure à l’usage mémoire réel à partir d’un seul chiffre
D’où viennent les valeurs de htop
uptimeindique depuis combien de temps le système fonctionne ; la même information peut aussi être consultée avec la commandeuptime- Le programme
uptimelit/proc/uptime- Le premier nombre est la durée totale, en secondes, pendant laquelle le système est resté allumé
- Le second nombre est la durée, en secondes, pendant laquelle le système est resté en état idle
- Sur un système multicœur, le temps idle est additionné par cœur et peut donc être supérieur à l’uptime total
strace uptime 2>&1 | grep openoustrace -e open uptimepermet de voir les fichiers ouverts paruptime- Un exemple de sortie inclut
/proc/uptime,/var/run/utmpet/proc/loadavg
- Un exemple de sortie inclut
- Les nombres de
/proc/uptimesont pratiques pour les programmes ou les scripts, tandis que la sortie deuptimeest formatée pour être lisible par un humain
Load average et utilisation CPU
- Les trois premières valeurs de
/proc/loadavgreprésentent le load average du système sur les 1, 5 et 15 dernières minutes - La quatrième valeur affiche le nombre de processus actuellement en cours d’exécution et le nombre total de processus sous une forme comme
1/120, et la dernière valeur est le dernier PID utilisé - Lorsqu’un nouveau processus est lancé, un PID lui est attribué ; en général, les PID augmentent puis sont réutilisés lorsqu’ils sont épuisés
- Le PID 1 appartient à
/sbin/init, lancé au démarrage
- Le PID 1 appartient à
- Si un seul processus apparaît comme en cours d’exécution dans
htop, il peut s’agir dehtoplui-même sleep 30n’est pas en cours d’exécution mais en état sleep, il n’augmente donc pas le nombre de running processes- Une tâche qui consomme continuellement du CPU, comme
cat /dev/urandom > /dev/null, augmente le nombre de running processes et le load average - Le load number est une valeur qui compte les processus en cours d’exécution ou en attente d’exécution, ainsi que les processus en état uninterruptible
- Le load average n’est pas une moyenne simple, mais une moyenne mobile à décroissance exponentielle
- Même le load average sur 1 minute ne reflète pas uniquement les 60 dernières secondes : il donne plus de poids à la dernière minute tout en incluant aussi une partie de l’activité antérieure
- Sur un système mono-CPU, avec un processus CPU-bound, on peut simplifier en considérant qu’un load average de
1.00correspond à 100 % d’utilisation CPU- Sur un système à 2 cœurs, la même situation peut être vue comme 50 % d’utilisation CPU
- Sur un système à 2 cœurs, le load average correspondant à 100 % d’utilisation CPU peut être simplifié à
2.00
- Cette simplification n’est pas toujours exacte, car les processus en état uninterruptible sont inclus dans la charge
- Il est donc possible d’avoir un load average élevé sans que l’utilisation CPU soit élevée
- L’utilisation CPU instantanée peut être vérifiée avec
mpstatsudo apt install sysstat -ympstat 1
Tasks, PID et arborescence des processus
- Tasks, en haut à droite dans
htop, affiche le nombre total de processus et le nombre de processus en cours d’exécution - Le noyau Linux appelle en interne les processus des tasks, et
htoputilise Tasks au lieu de Processes pour économiser de l’espace à l’écran Shift+Hpermet d’activer ou de désactiver l’affichage des threads- Si vous voyez quelque chose comme
Tasks: 23, 10 thr, les threads sont affichés
- Si vous voyez quelque chose comme
Shift+Kpermet d’activer ou de désactiver l’affichage des kernel threads- Si vous voyez quelque chose comme
Tasks: 23, 40 kthr, les kernel threads sont affichés
- Si vous voyez quelque chose comme
- Un PID est attribué à chaque lancement d’un nouveau processus
- Lorsqu’on l’exécute en arrière-plan, comme avec
sleep 1000 &, le numéro de job et le PID sont affichés - Dans
bash,$!est développé en l’ID du dernier processus lancé en arrière-plan
- Lorsqu’on l’exécute en arrière-plan, comme avec
- Les informations relatives aux processus se trouvent sous
/proc/<pid>//proc/<pid>/cmdlinecontient la commande exécutée, avec les arguments séparés par des octets\0tr '\0' '\n' < /proc/<pid>/cmdlineoustrings /proc/<pid>/cmdlinepermet de l’afficher de façon plus lisible/proc/<pid>/cwdest un lien vers le répertoire de travail courant, et/proc/<pid>/exeun lien vers le binaire exécuté
- Les outils de diagnostic comme
htop,topetpslisent les détails des processus dans/proc/<pid>/<file> - Celui qui crée un nouveau processus est le parent process, le processus nouvellement créé est le child process, et cette relation forme l’arborescence des processus
- Dans
htop, appuyer surF5permet de voir la hiérarchie des processusps fetpstree -amontrent aussi la même relation
- Quand on exécute
datedepuisbash,bashcrée une copie de lui-même avecfork, charge/bin/dateen mémoire avecexec, puis lebashparent attend la fin du child /sbin/initest lancé au démarrage et démarresshd; lors d’une connexion SSH,sshdcrée un processus de session, et cette session exécute le shellbash
Utilisateurs et droits des processus
- Chaque processus appartient à un utilisateur, représenté par un ID numérique
- L’entrée
Uidde/proc/<pid>/statuspermet de vérifier l’ID utilisateur d’un processus - Une commande comme
id 1000affiche le nom d’utilisateur et les groupes correspondant à l’ID numérique idchoisit la source de résolution des noms selon la configuration de/etc/nsswitch.conf- Dans le système d’exemple, il lit
/etc/passwdet/etc/group compatcorrespond au mode Compatibility, similaire àfilesmais autorisant des entrées spéciales- Les informations utilisateur peuvent aussi être stockées dans d’autres bases de données ou services, comme LDAP
- Dans le système d’exemple, il lit
/etc/passwdet/etc/groupsont des fichiers texte qui associent des ID numériques à des noms lisibles par l’humain- Les vraies informations de mot de passe se trouvent dans
/etc/shadow$6$désigne l’algorithme de hachagesha512- Viennent ensuite un salt aléatoire pour empêcher les attaques par rainbow table, puis le hash du mot de passe + salt
- Par défaut, un programme s’exécute avec les droits de l’utilisateur qui l’a lancé
- C’est aussi le cas même si le propriétaire de l’exécutable est un autre utilisateur
- Pour l’exécuter en tant qu’un autre utilisateur ou en tant que
root, on utilisesudosudo ids’exécute avec l’UID 0 deroot- On peut l’exécuter en tant qu’utilisateur précis, par exemple avec
sudo -u daemon id
- Si l’on tente d’écrire directement dans
/etc/sudoersavec une redirection, seulechoest exécuté en root et l’append est effectué par l’utilisateur courant, ce qui peut échouerecho "$USER ALL=(ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoerssudo bash -c "echo '$USER ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers"
/etc/sudoersdoit être édité avecsudo visudo- Il valide le contenu avant l’enregistrement, afin d’éviter une erreur qui empêcherait d’utiliser
sudo
- Il valide le contenu avant l’enregistrement, afin d’éviter une erreur qui empêcherait d’utiliser
/usr/bin/passwdpeut écrire dans/etc/shadowmême lorsqu’il est exécuté par un utilisateur ordinaire- La présence de
sdans les permissions du fichier le fait fonctionner comme un exécutable setuid - Il s’exécute avec les droits de
root, le propriétaire de l’exécutable - Les exécutables setuid appartenant à root peuvent être trouvés avec
find /bin -user root -perm -u+s
- La présence de
Codes d’état des processus
- La colonne d’état de
htopest affichée sous le nomS, et ses principales valeurs sont les suivantesR: running ou runnable, en cours d’exécution ou en attente dans la run queueS: interruptible sleep, en attente de la fin d’un événementD: uninterruptible sleep, généralement en attente d’I/OZ: defunct zombie, terminé mais pas reap par son parentT: arrêté par un signal de job controlt: arrêté par un debugger pendant un tracingX: dead, état qui ne devrait pas être affiché
psaffiche aussi des sous-états commeSs,R+ouSs+-
R : en cours d’exécution ou exécutable
- L’état
Rsignifie qu’un processus est actuellement en cours d’exécution ou attend dans la file d’exécution - Le code source d’un programme, après compilation, devient des instructions CPU ; à l’exécution, il est chargé en mémoire et le CPU exécute ces instructions
- Être en cours d’exécution signifie que le CPU exécute physiquement les instructions
- L’état
-
S : sleep interruptible
- Dans l’état
S, les instructions du processus ne sont pas exécutées par le CPU ; il attend un événement ou une condition - Quand l’événement se produit, le kernel passe son état à running
sleep 1000est un exemple d’attente pendant une durée donnée- Cet état peut être interrompu par un signal
- Dans
htop, on peut envoyer un signal en appuyant surF9 killest un appel système qui envoie un signal, et/bin/killest le programme userland qui l’appelle- Le signal par défaut est
TERM, qui demande l’arrêt du processus - Les signals sont des nombres ; leurs noms sont généralement écrits en majuscules et peuvent avoir le préfixe
SIG - Exemples :
INT,KILL,STOP,CONT,HUP kill -INT 10089,kill -2 10089et/bin/kill -2 10089produisent le même effet- Quand on appuie sur
CTRL+C,bashenvoieSIGINTau foreground process - Envoyer
SIGINTouSIGTERMne garantit pas que le processus s’arrête - Un programme peut définir un signal handler pour effectuer des opérations de nettoyage puis se terminer
SIGKILL, ou9, force le kernel à terminer le processus sans lui laisser la possibilité de répondre
- Dans l’état
-
D : sleep non interruptible
- L’état
Dne peut pas être réveillé par un signal ; commeSIGKILLest aussi un signal, on ne peut pas tuer ce type de processus - Cet état est utilisé lorsqu’un processus doit attendre sans interruption, ou lorsque l’événement est censé se produire rapidement
- Exemple : lecture/écriture disque
- Un processus uninterruptible peut souvent être en attente d’I/O après un page fault
- Ce type d’état peut apparaître lors de latences de lecture/écriture NFS
- Il peut aussi apparaître lorsque la mémoire disponible est trop faible et que les processus swappent beaucoup
- Par exemple, si l’on exécute
sudo mount 8.8.8.8:/tmp /tmp &,/sbin/mount.nfspasse à l’étatD - Avec
strace, on voit que l’appel systèmemountbloque le processus - En passant l’option
intràmount, on peut l’exécuter de façon interruptible sudo mount 8.8.8.8:/tmp /tmp -o intr
- L’état
-
Z : processus zombie
- L’état
Zsignifie que le processus s’est terminé mais que son parent ne l’a pas encore reap - Un processus zombie peut être normal s’il n’existe que brièvement
- Un processus zombie qui reste longtemps peut indiquer un bug du programme
- Un processus zombie ne consomme pas de mémoire et n’occupe qu’un PID
- On ne peut pas
killle processus zombie lui-même - On peut envoyer
SIGCHLDau parent process pour lui demander de reap le zombie - En tuant le parent process, on peut supprimer le parent et ses zombies
- On peut reproduire l’état zombie avec un programme C où, après
fork, le child faitexit(0)et le parent faitsleep(20) - Quand le parent se termine, le zombie disparaît
- La raison pour laquelle le zombie est conservé est que le parent doit pouvoir vérifier l’exit code du child avec l’appel système
wait
- L’état
-
T et t : processus arrêtés
- L’état
Tsignifie que le processus a été arrêté par un signal de job control - Si l’on appuie sur
CTRL+Zpendant l’exécution decat /dev/urandom > /dev/null, il passe à l’étatT - On peut le relancer avec
fg - On peut aussi l’arrêter avec le signal
STOPet le reprendre avec le signalCONT - L’état
tsignifie que le processus est arrêté pendant qu’un debugger le trace - Si l’on s’attache avec
sudo gdb -p <pid>à un processus lancé avecnc -l 1234 &, il passe à l’étatt
- L’état
Temps CPU, niceness, priorité
- Linux étant un système d’exploitation multitâche, même avec un seul CPU plusieurs processus semblent s’exécuter simultanément
- En réalité, un CPU unique ne peut exécuter qu’une seule instruction à la fois ; il utilise donc le partage de temps (time sharing)
- Un processus s’exécute brièvement puis est interrompu
- Les autres processus en attente d’exécution s’exécutent à tour de rôle
- Le court intervalle pendant lequel un processus s’exécute s’appelle un time slice
- Un time slice ne dure généralement que quelques millisecondes, ce qui se remarque peu tant que la charge du système n’est pas élevée
- Sur un seul cœur, si le load average vaut
1.0, on peut considérer que le CPU est utilisé à 100 %- S’il est supérieur à
1.0, il y a plus de processus à exécuter que le CPU ne peut en traiter, ce qui peut entraîner des ralentissements ou des délais - S’il est inférieur à
1.0, le CPU est parfois en état d’inactivité (idle)
- S’il est supérieur à
- Le fait que le temps d’exécution d’un processus ne corresponde pas exactement au temps réellement écoulé s’explique également par le partage de temps
- Lorsqu’il y a plus de tâches à exécuter que de cœurs CPU disponibles, il faut décider quelle tâche exécuter en premier
- Le scheduler du noyau Linux choisit le prochain processus dans la run queue, selon l’algorithme de planification du noyau
- En général, on ne peut pas contrôler directement le scheduler, mais on peut indiquer quels processus sont plus importants
- La niceness, affichée sous
NI, est la priorité en espace utilisateur (user-space priority)- Sa plage va de
-20à19 -20correspond à la priorité la plus élevée et19à la priorité la plus basse- On peut considérer qu’un processus plus nice cède davantage la place à un processus moins nice
- Sa plage va de
PRIest la priorité en espace noyau (kernel-space priority) utilisée par le noyau Linux- Sa plage va de
0à139 0~99correspond au temps réel,100~139à la plage destinée aux utilisateurs
- Sa plage va de
- La relation entre la valeur nice et la priorité s’explique par
PR = 20 + NI- Les valeurs
-20~+19deNIdeviennent0~39pourPR, qui sont ensuite mappées sur100~139
- Les valeurs
- Avant l’exécution, la niceness se définit avec
nice -n niceness program - La niceness d’un processus en cours d’exécution se modifie avec
renice -n niceness -p PID - Les couleurs d’utilisation CPU sont les suivantes
- Blue : thread de faible priorité,
nice > 0 - Green : thread de priorité normale
- Red : thread noyau
- Blue : thread de faible priorité,
Indicateurs mémoire : VIRT, RES, SHR, MEM%
- Un processus a l’impression d’être seul en mémoire ; cela est implémenté par la mémoire virtuelle
- Un processus n’accède pas directement à la mémoire physique, mais possède son propre espace d’adressage virtuel
- Le noyau peut traduire les adresses de mémoire virtuelle en mémoire physique, ou en mapper certaines parties sur le disque
- C’est pourquoi un processus peut sembler utiliser plus de mémoire que celle installée dans l’ordinateur
- La mesure de l’utilisation mémoire d’un processus varie selon qu’elle inclut ou non les éléments suivants
- bibliothèque partagée
- mémoire mappée sur disque
- mémoire sortie en swap
- Les couleurs d’utilisation mémoire sont les suivantes
- Green : mémoire utilisée
- Blue : buffers
- Orange : cache
-
VIRT/VSZ
VIRTcorrespond à la quantité totale de mémoire virtuelle utilisée par une tâche- Elle inclut le code, les données, les bibliothèques partagées, les pages sorties en swap, ainsi que les pages mappées mais non utilisées
- Même si une application demande 1 Go et n’en utilise que 1 Mo,
VIRTpeut afficher 1 Go - Même si un fichier de 1 Go est mappé avec
mmapsans être réellement utilisé,VIRTpeut afficher 1 Go - Dans la plupart des cas,
VIRTn’est pas un chiffre très utile
-
RES/RSS
REScorrespond à la mémoire physique qui n’a pas été sortie en swap, c’est-à-dire la mémoire résidente actuellement présente en mémoire physiqueRESpeut mieux représenter l’utilisation réelle de la mémoire queVIRT, mais a aussi ses limites- Elle n’inclut pas la mémoire sortie en swap
- Une partie de la mémoire peut être partagée avec d’autres processus
- Si un processus utilise 1 Go de mémoire puis appelle
fork(), leRESdes deux processus peut apparaître comme 1 Go chacun, mais en réalité seul 1 Go peut être utilisé grâce au copy-on-write de Linux
-
SHR
SHRcorrespond à la quantité de mémoire partagée utilisée par une tâche- Elle reflète la mémoire qui peut potentiellement être partagée avec d’autres processus
- L’exemple de programme C montre comment les valeurs
VIRT,RESetSHRévoluent au fil des étapesmalloc, utilisation partielle de la mémoire,fork, puis écritures mémoire supplémentaires - La section de cet exemple mémoire reste marquée TODO
-
MEM%
MEM%correspond à la proportion de mémoire physique disponible actuellement utilisée par une tâche- C’est la valeur de
RESdivisée par la RAM totale - Exemple : si
RESvaut400Met que la RAM est de 8 Go,400/8192*100 = 4.88%
Processus par défaut d’Ubuntu Server 16.04
-
Étude des processus lancés sur Ubuntu Server 16.04.1 LTS x64 d’un droplet Digital Ocean fraîchement créé
-
/sbin/init/sbin/initcoordonne le reste du processus de démarrage et configure l’environnement utilisateur- Il devient le parent ou le grand-parent des processus lancés automatiquement
- Le résultat de
dpkg -S /sbin/initétantsystemd-sysv: /sbin/init, il s’agit de systemd sur ce système - Le tuer ne produit aucun effet
-
/lib/systemd/systemd-journaldsystemd-journaldest un service système qui collecte et stocke les données de journalisation- Il crée et maintient un journal structuré et indexé à partir des informations de log reçues de plusieurs sources
- Il utilise un format de fichier spécial optimisé pour les messages de log, plutôt que de simples fichiers de log en texte brut
- Consultation avec
journalctl journalctl _COMM=sshdjournalctl _COMM=sshd -o json-prettyjournalctl --since yesterdayjournalctl -bjournalctl -fjournalctl --disk-usagejournalctl --vacuum-size=1G- Il ne semble pas possible de le supprimer ou de le désactiver ; on peut seulement désactiver la journalisation
-
/sbin/lvmetad -flvmetadmet en cache les métadonnées LVM afin que les commandes LVM puissent les lire sans scanner le disque- Le scan du disque prend du temps et peut perturber les opérations normales du système et du disque
- LVM peut être vu comme des « partitions dynamiques » permettant de créer, redimensionner et supprimer des volumes logiques pendant que Linux fonctionne
- Conclusion : il faut probablement le conserver si LVM est utilisé
-
/lib/systemd/udevdsystemd-udevdécoute les uevents du noyau et exécute, pour chaque événement, les instructions correspondantes des règles udev- udev est le gestionnaire de périphériques du noyau Linux et gère principalement les nœuds de périphériques du répertoire
/dev - Son utilité sur un serveur virtuel n’est pas certaine
-
/lib/systemd/timesyncdsystemd-timesyncdest un service système qui synchronise l’horloge locale du système avec un serveur NTP distant- Il remplace
ntpd - Dans le système d’exemple,
timedatectl statusindiqueyespour l’heure réseau et la synchronisation NTP - Dans la sortie de
netstat, seul le port SSH apparaît en écoute ; contrairement àntpdsur Ubuntu 14.04, il n’ouvre pas plusieurs ports UDP 123
-
/usr/sbin/atd -fatdexécute les tâches placées dans une file pour être lancées plus tardatetbatchlisent des commandes depuis stdin ou un fichier pour les exécuter ultérieurement- Contrairement à cron, qui planifie des exécutions répétées,
ats’exécute une seule fois à un moment précis - Dans l’exemple,
echo "touch /tmp/yolo.txt" | at now + 1 minutecrée un fichier une minute plus tard - S’il n’est pas utilisé, le supprimer avec
sudo apt remove at -y --purge
-
/usr/lib/snapd/snapd- Snappy Ubuntu Core est présenté comme une déclinaison d’Ubuntu utilisant des mises à jour transactionnelles
- snap est décrit comme un format de paquet Linux universel permettant à un même paquet binaire de fonctionner sur desktop, serveur, cloud et appareils Linux
- On peut le comprendre comme un paquet deb simplifié qui regroupe ses dépendances dans un seul snap
- Comme aucun déploiement ni distribution d’application avec snappy sur serveur n’a été tenté, il est supprimé avec
sudo apt remove snapd -y --purge
-
/usr/bin/dbus-daemon- D-Bus est un mécanisme IPC et RPC entre plusieurs processus s’exécutant simultanément sur la même machine
- Il est nécessaire pour un environnement de bureau, mais son utilité sur un serveur exécutant une application web est questionnée
- Après suppression de
dbus,timedatectl statuséchoue avecFailed to create bus connection: No such file or directory - Conclusion : mieux vaut donc le conserver
-
/lib/systemd/systemd-logindsystemd-logindest un service système qui gère les connexions utilisateur
-
/usr/sbin/cron -fcronest un daemon qui exécute des commandes planifiées-fsignifie mode foreground, c’est-à-dire sans daemonisation- Les tâches à exécuter périodiquement peuvent être planifiées avec cron
crontab -e- Sous Ubuntu, conclusion : on utilise plutôt
/etc/cron.hourly,/etc/cron.daily, etc. - Les logs peuvent être consultés de la manière suivante
grep cron /var/log/syslogjournalctl _COMM=cronjournalctl _COMM=cron --since="date" --until="date"- Il est probable que cron soit conservé
- S’il n’est pas supprimé, il peut être arrêté et désactivé avec
sudo systemctl stop cron,sudo systemctl disable cron apt remove cronpeut tenter d’installer postfix, entre autres- C’est parce que cron suggère un agent de transport de courrier
-
/usr/sbin/rsyslogd -nrsyslogdest un utilitaire système qui prend en charge la journalisation des messages- Il remplit les fichiers de log de
/var/log/, comme/var/log/auth.log - Les fichiers de configuration se trouvent dans
/etc/rsyslog.d - Il permet de configurer une journalisation centralisée en envoyant les logs vers un serveur distant
- La commande
loggerpermet de laisser des messages dans/var/log/syslogdepuis un script en arrière-plan - Même si
systemd-journaldest déjà présent, rsyslog et le journal ont des caractéristiques différentes, et les utiliser ensemble peut être utile dans certains cas - Il est donc conservé pour le moment
-
/usr/sbin/acpidacpidest le daemon d’événements ACPI- Il est conçu pour notifier les programmes en espace utilisateur des événements ACPI
- ACPI sert notamment à la découverte et à la configuration des composants matériels, à la gestion de l’alimentation et à la surveillance de l’état
- Comme aucun suspend/resume n’est prévu sur le serveur virtuel, un essai de suppression a été effectué
reboota réussi, mais aprèshalt, Digital Ocean considérait toujours la machine comme allumée, et il a fallu utiliser Power Off dans l’interface web- Conclusion : il vaut donc mieux le conserver
-
/usr/bin/lxcfs /var/lib/lxcfs/lxcfsest un système de fichiers FUSE conçu pour les conteneurs LXC- Il fournit une vue virtualisée de certains fichiers de
/procet un accès filtré au système de fichiers cgroup de l’hôte - Il rend les résultats d’uptime, top, etc. plus « corrects » depuis l’intérieur d’un conteneur
- Si aucun conteneur LXC n’est utilisé, il peut être supprimé avec
sudo apt remove lxcfs -y --purge
-
/usr/lib/accountservice/accounts-daemon- AccountsService fournit une interface D-Bus et une implémentation pour interroger et manipuler les informations de comptes utilisateur
- L’implémentation repose sur les commandes
usermod(8),useradd(8),userdel(8)
-
Ce qui cassera après suppression est laissé à « Time will tell »
-
/sbin/mdadmmdadmest un utilitaire Linux qui gère et surveille les périphériques RAID logiciels- Le RAID est une méthode qui permet d’utiliser plusieurs disques durs comme s’ils n’en formaient qu’un
- Le RAID 0 augmente la capacité des disques
- Les RAID 1, RAID 5, RAID 6 et RAID 10 visent à éviter la perte de données en cas de défaillance d’un disque
- Il peut être supprimé avec
sudo apt remove mdadm -y --purge
-
/usr/lib/policykit-1/polkitd --no-debugpolkitdest le daemon PolicyKit, et polkit est un framework d’autorisation- On peut le comprendre comme une sorte de sudo à granularité fine
- Il permet d’accorder à un utilisateur non privilégié le droit d’effectuer certaines actions en tant que root
- Exemple : autoriser le redémarrage sur un Linux desktop
- Sur un serveur, il est indiqué qu’on peut le supprimer avec
sudo apt remove policykit-1 -y --purge - Ce qui cassera reste toutefois une question ouverte
-
/usr/sbin/sshd -Dsshdest le daemon OpenSSH- L’option
-Dempêche le détachement et le passage en daemon, ce qui facilite la supervision
-
/sbin/iscsidiscsidest un daemon en arrière-plan qui fonctionne selon la configuration iSCSI et gère les connexions- iSCSI est un standard de réseau de stockage basé sur IP : il transmet des commandes SCSI sur un réseau IP afin d’utiliser un stockage distant comme un disque local
- Il peut être supprimé avec
sudo apt remove open-iscsi -y --purge
-
/sbin/agetty --noclear tty1 linuxagettyest un getty Linux alternatif- getty gère les terminaux physiques ou virtuels ; lorsqu’une connexion est détectée, il affiche une invite de nom d’utilisateur puis exécute le programme
login - Sur Digital Ocean, il est possible d’interagir avec ce terminal dans le navigateur via
Consoledans les détails du droplet - Après suppression des fichiers liés à
getty@tty1.servicepuis redémarrage, la connexion SSH fonctionnait encore, mais il était impossible de se connecter via la console web de Digital Ocean
-
Sessions SSH, bash, htop
sshd: root@pts/0signifie que la session SSH de l’utilisateurrootest configurée sur le pseudoterminalpts/0- Un pseudoterminal émule un véritable terminal texte
bashest le shell utilisé- Lorsqu’un tiret le précède, comme dans
-bash, cela signifie qu’il a été lancé comme login shell - Un shell dont le premier caractère de l’argument zéro est
-, ou qui est lancé avec l’option--login, est un login shell - Dans ce cas, il lit un ensemble différent de fichiers de configuration
htopest le visualiseur interactif de processus en cours d’exécution dans la capture d’écran
Expérience de suppression de services
- La liste des suppressions standard est la suivante
sudo apt remove lvm2 -y --purgesudo apt remove at -y --purgesudo apt remove snapd -y --purgesudo apt remove lxcfs -y --purgesudo apt remove mdadm -y --purgesudo apt remove open-iscsi -y --purgesudo apt remove accountsservice -y --purgesudo apt remove policykit-1 -y --purge
- L’édition Extreme inclut les opérations suivantes
sudo apt remove dbus -y --purgesudo apt remove rsyslog -y --purgesudo apt remove acpid -y --purgesudo systemctl stop cron && sudo systemctl disable cronsudo rm /etc/systemd/system/getty.target.wants/getty@tty1.servicesudo rm /lib/systemd/system/getty@.service
- La configuration nginx, PHP7 et MySQL suivant les instructions de unattended installation of WordPress on Ubuntu Server fonctionne
Annexe : outils d’investigation et comportement du shell
-
Trouver le code source
- Quand
stracene suffit pas, on peut consulter le code source - On trouve l’emplacement du binaire avec
which uptime, puis le package Ubuntu avecdpkg -S /usr/bin/uptime - Dans l’exemple,
uptimeappartient au packageprocps - On peut rechercher le package sur packages.ubuntu.com et trouver le lien vers le dépôt source
- Quand
-
Descripteurs de fichier et redirection
- Pour rediriger stderr vers stdout, on utilise
2>&1 echo something > fileécrit stdout dans file, et équivaut àecho something 1> fileecho something 2> fileécrit stderr dans fileecho something 2>1signifie rediriger stderr vers un fichier nommé1- Dans
2>&1, avec le&,1n’est pas un nom de fichier mais un identifiant de flux
- Pour rediriger stderr vers stdout, on utilise
-
Problème de couleurs dans PuTTY
- Si des éléments de
htopsemblent manquer dans PuTTY, cela peut se résoudre dans les réglages Window → Colours - Clic droit sur la barre de titre
- Change settings...
- Window → Colours
- Sélectionner le bouton radio Both
- Apply
- Si des éléments de
-
Un shell simple écrit en C
- Un shell simple écrit en C illustre l’utilisation des appels système
fork,execetwait - Si l’entrée est
exit, il se termine comme built-in du shell - Les autres commandes sont exécutées avec
execlpdans le processus enfant aprèsfork, tandis que le parent attend l’état de fin avecwaitpid - Les exemples d’exécution de
date,trueetfalseaffichent chacun le code de sortie du processus enfant - La raison pour laquelle le message de fin d’un processus en arrière-plan comme
sleep 1 &n’apparaît qu’après avoir appuyé sur Entrée est que le shell attend une entrée et vérifie l’état des processus en arrière-plan au moment de la saisie d’une commande
- Un shell simple écrit en C illustre l’utilisation des appels système
Points restant à étudier et historique des corrections
- Les points que l’auteur souhaite approfondir sont notamment les sous-états des états de processus, les threads noyau,
/dev/pts, la mémoireCODE·DATA·SWAP, la durée d’un time slice, l’algorithme du scheduler Linux, le core pinning, les pages de manuel, les couleurs des barres CPU/mémoire, la limite des process ID et les fork bombs,lsof,ionice,schedtool, etc. - Les principales corrections et mises à jour incluent les points suivants
- Le temps idle de
/proc/uptimeest la somme de tous les cœurs - Les
printfparent/enfant de l’exemple C de zombie ont été corrigés - Il a été ajouté que
apt remove crontente d’installerpostfixà cause d’une dépendance MTA idpeut charger des informations depuis d’autres sources que/etc/passwdvia/etc/nsswitch.conf- Une explication du format du hash de mot de passe dans
/etc/shadowa été ajoutée /etc/sudoersdoit être modifié prudemment avecvisudo- Une explication de
MEM%a été ajoutée - La section sur la load average a été réécrite
- Le signal par défaut de
kill 1234a été corrigé : ce n’est pasINTmaisTERM - Une explication des barres de couleur CPU et mémoire a été ajoutée
- Le temps idle de
1 commentaires
Avis sur Hacker News
Je suis passé récemment à btop : son interface est moderne juste comme il faut, utile et suffisamment riche en informations.
Comme d’autres l’ont dit, il semble aussi afficher la consommation électrique (en watts), ainsi que des informations réseau, GPU et disque.
https://github.com/aristocratos/btop
Comme on ne peut pas désactiver les barres d’utilisation disque, le graphe de débit I/O paraît très écrasé si la fenêtre de console n’est pas très grande.
Les graphes CPU/GPU prennent trop de place, et j’aimerais globalement que la table des fichiers ouverts occupe davantage d’espace.
Il y a deux réglages que je change à chaque fois que j’utilise htop, et la différence est énorme.
D’abord, je désactive les threads utilisateur. La plupart du temps, ils ne font qu’encombrer l’affichage de htop et apportent très peu d’informations utiles.
Ensuite, j’active la vue en arbre des processus. Savoir d’où un processus a été lancé est souvent plus important que le reste, et cela permet aussi de suivre plus facilement des processus de compilation qui traitent beaucoup de fichiers et consomment du CPU.
Personnellement, je pense que ces deux comportements devraient être les valeurs par défaut de htop.
Je suis content de voir l’explication selon laquelle la mémoire virtuelle est un indicateur peu fiable. Le Gestionnaire des tâches de Windows l’affiche par défaut de cette façon, et c’est très mauvais.
La taille de l’ensemble résident (RSS) est l’indicateur le plus fiable, tandis que les autres valeurs peuvent être artificiellement gonflées par des fichiers mappés en mémoire qui ne posent pas réellement problème.
Par exemple, même si l’on mappe en mémoire un fichier de logs de 2 Go, seules les parties lues sont chargées en pages ; cela ne signifie donc pas que de la mémoire réelle est utilisée. Pourtant, l’utilisateur regarde le processus et se demande : « pourquoi cette appli utilise-t-elle autant de mémoire ? »
Chrome a lui aussi subi ce problème pendant un temps et a réduit son usage des fichiers mappés en mémoire, non pas parce que ceux-ci étaient mauvais, mais parce que les utilisateurs réagissaient de façon excessive à une valeur qui ne représentait pas l’utilisation réelle de mémoire physique.
On trouve même sur le Web des guides conseillant de juger l’utilisation mémoire à partir de la quantité de mémoire virtuelle allouée ; au moins, cet article met correctement le doigt sur ce point.
Référence : https://en.wikipedia.org/wiki/Proportional_set_size
Avec des I/O classiques sur fichier, elles ne le sont pas. Sur les clusters HPC qui surveillent l’usage mémoire de chaque tâche et la tuent lorsqu’elle dépasse la quantité demandée, cela produit des résultats assez intéressants.
Dès qu’une pression mémoire apparaît, elle cesse d’être représentative. J’ai vu plusieurs mauvaises décisions dues à ce malentendu, et il m’est même arrivé de retirer cette valeur d’un graphique pour éviter qu’un collègue n’en tire la conclusion inverse.
Comme son nom l’indique, il ne montre que la partie mappée vers de la mémoire physique allouée de manière privée à chaque processus, ce qui est plus proche du Resident Set d’Unix.
Vous faisiez sans doute référence à l’utilisation mémoire dans l’onglet Performances, mais comme cela peut être confondu avec tous les indicateurs d’utilisation mémoire, je fais la distinction.
Dans top, utiliser le caractère
>trie par utilisation mémoire.Je m’en sers parfois pour comprendre pourquoi un hôte ralentit, et on peut aussi voir
swapdaccaparer le CPU.Mmajuscule, et pour le CPUPmajuscule.Lire ce genre d’article me rappelle que, même après plus de 20 ans d’utilisation quotidienne de Linux, je n’exploite encore qu’une partie de son potentiel. Bon article.
J’ai l’impression que HN se remet à aller mieux.
J’espère que ce n’était pas simplement la période du fantôme ambulant de HN.
Pour ceux qui ne connaissent pas
nmon, ça vaut aussi le coup d’y jeter un œil.Appuyez sur
hpour afficher la liste des moniteurs disponibles, appuyez de nouveau pour la masquer, et quittez avecq.https://nmon.sourceforge.io/pmwiki.php
En particulier, le débit disque et les I/O visibles avec les touches
detDsont assez utiles.Le graphe large d’utilisation CPU gère facilement un grand nombre de cœurs, ce qui est appréciable.
Pour un usage différent des outils de type
*top, j’en suis venu à préférer les rapports différentiels sobres façonpset les rapports système globaux commevmstat.De cette façon, tout reste dans le tampon de défilement du terminal : https://github.com/c-blake/procs
C’est écrit en Nim, un langage inhabituellement efficace et expressif.
J’ai cet article en favori depuis 2016 et j’y suis revenu plusieurs fois au fil des années.