1. Les processus #
Ce qui tourne et comment le piloter.
Lister #
ps aux --sort=-%cpu | head # plus gros consommateurs CPU
ps aux --sort=-%mem | head
ps -ef --forest # arbre parent/enfant
pgrep -a nginx ; pidof sshd
top # P : tri CPU, M : tri mémoire, 1 : par cœur, k : tuer
htop # version interactive et coloréeÉtats #
| État | Signification |
|---|---|
| R | en cours d'exécution ou prêt |
| S | endormi, attend un événement (cas normal) |
| D | attente d'E/S non interruptible (disque, NFS) : ne se tue pas |
| Z | zombie : terminé, pas encore récupéré par son parent |
| T | arrêté (Ctrl+Z) |
Signaux #
kill -15 1234 # SIGTERM : demande d'arrêt propre (défaut)
kill -9 1234 # SIGKILL : arrêt immédiat, sans nettoyage
kill -HUP 1234 # SIGHUP : souvent « relire la configuration »
pkill -u bob # tous les processus de bob
killall -s TERM python3Bonne Pratique : Envoyez toujours SIGTERM d'abord et laissez quelques secondes : SIGKILL empêche l'application de fermer ses fichiers et connexions proprement.
Priorités et arrière-plan #
nice -n 10 tar -czf backup.tgz /srv # lancer avec une priorité basse
renice +5 -p 1234
ionice -c3 rsync -a /src /dst # E/S seulement quand le disque est libre
commande & ; jobs ; fg %1 ; bg %1 # tâches du shell
nohup ./long.sh > long.log 2>&1 & # survivre à la déconnexion
tmux new -s maintenance # session détachable (Ctrl+B D, puis tmux attach)2. CPU, mémoire et disques #
Lire les bons indicateurs.
Charge #
uptime # load average 1, 5 et 15 min
nproc # nombre de cœursLa charge compte les processus en exécution ou en attente (y compris en état D). Elle s'interprète par rapport au nombre de cœurs : 4 sur 4 cœurs = plein ; 12 sur 4 cœurs = saturation. Une charge élevée avec un CPU peu utilisé indique souvent des attentes disque.
Mémoire #
free -hRegardez la colonne available, pas free : Linux utilise la mémoire libre comme cache disque (buff/cache), récupérable immédiatement. Un serveur avec peu de « free » mais beaucoup d'« available » va bien.
Quand la mémoire manque vraiment, le noyau active l'OOM killer qui tue le processus le plus gourmand :
journalctl -k | grep -i 'out of memory'
dmesg -T | grep -i oom
cat /proc/1234/status | grep VmRSSvmstat et iostat #
vmstat 1 # r, b, si/so, wa
iostat -xz 1 # %util et await par disque (paquet sysstat)
mpstat -P ALL 1 # CPU par cœur
pidstat 1 # consommation par processus
sar -u -f /var/log/sysstat/sa26 # historique (sysstat)3. Diagnostiquer un processus #
Voir ce qu'il fait vraiment.
lsof, strace et /proc #
sudo lsof -p 1234 # fichiers et sockets ouverts
sudo lsof -i :8080 # qui utilise ce port ?
sudo lsof /var/log/app.log
sudo strace -p 1234 -f -e trace=network,file # appels système en direct
sudo strace -c -p 1234 # statistiques des appels (Ctrl+C)
cat /proc/1234/cmdline | tr '\0' ' '
ls -l /proc/1234/cwd /proc/1234/exe
cat /proc/1234/limits # limites (fichiers ouverts...)
ulimit -nLimiter les ressources #
systemd place chaque service dans un cgroup : on peut le limiter sans toucher à l'application.
sudo systemctl set-property app.service MemoryMax=1G CPUQuota=150%
systemd-cgtop # consommation par service4. Une méthode #
Ne pas chercher au hasard.
USE #
uptime: la charge monte-t-elle ?dmesg -T | tail: erreurs noyau, OOM, disque ?vmstat 1: file d'exécution, swap, attente E/Smpstat -P ALL 1: un cœur saturé ?iostat -xz 1: disque saturé ?free -h: mémoire disponibless -s,ip -s link: connexions, erreurs réseautop/pidstat: quel processus ?
À savoir : Cette liste des « 60 premières secondes » vient de l'équipe performance de Netflix : elle suffit à orienter la plupart des diagnostics.
