Troubleshooting

Kernel

Logs

  • dmesg | tail : cette commande permet de voir les derniers messages envoyés par le kernel.
  • journalctl -k : affiche les erreurs kernel du dernier boot. Pour remonter dans l’historique des boots on peut utiliser l’option -b.

La commande lsof

lsof donne des informations sur les fichiers ouverts par les processus. Il peut montrer des fichiers standards, un dossier, un périphérique, une librairy ou un socket.

Quelques commandes :

  • lsof : affiche tous les fichiers ouverts par les processus
  • lsof -i 4 -a -p 1234 : affiche les sockets IPv4 ouverts par le processus 1234
  • lsof /foo/bar : affiche les processus qui accèdent à /foo/bar

Cette commande peut aider à déterminer ce qui ralentit un processus.

CPU

La commande uptime

$ uptime
09:31:47 up 22:29,  1 user,  load average: 0.22, 0.22, 0.41

La commande uptime permet de voir rapidement la charge moyenne du système. Ces trois nombres représentent le nombre de processus qui s’exécutent ou attendent de s’exécuter sur le processeur ainsi que ceux qui sont en attente d’entrées/sorties (souvient lié à la mémoire de masse). Les nombres sont données à 1, 5 et 15 minutes pour suivre l’évolution.

La commande vmstat

$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
0  0      0 511248 396956 2344332    0    0    25   101  606  453 20  8 72  0  0
0  0      0 511140 396956 2344332    0    0     0     0  191  642  1  1 99  0  0
0  0      0 511172 396956 2344332    0    0     0     0  150  438  1  0 99  0  0

Cette commande affiche un résumé des statistiques du système. La première ligne de statistiques peut être ignorée puisqu’elle rassemble des informations depuis le démarrage de la machine.

Voici les colonnes intéressantes :

  • r : le nombre de processus s’exécutant ou en attente d’exécution par le CPU. Une valeur plus grande que le nombre de CPU indique une saturation.
  • free : la quantité de mémoire libre en kilo-octets.
  • si et so : “swap in” et “swap out”. Si ces valeurs sont différentes de zéro c’est que le système manque de mémoire vive.
  • us, sy, id, wa et st : répartition du temps CPU en pourcentage. Les champs signifient : le temps utilisateur, système, inutilité, en attente d’I/O et le temps volé à une machine virtuelle (quand on utilise la virtualisation avec Xen par exemple).

La somme des temps utilisateur et système (us + sy) peut confirmer que les CPUs sont trop occupés. Un trop grand pourcentage dans la colonne wa peut indiquer un goulot d’étranglement au niveau du stockage si celui-ci est présent constamment.

La commande mpstat

$ mpstat -P ALL 1
12:13:33 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
12:13:34 PM  all    0.75    0.00    0.25    0.00    0.00    0.00    0.00    0.00    0.00   98.99
12:13:34 PM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
12:13:34 PM    1    2.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   97.00
12:13:34 PM    2    1.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   98.00
12:13:34 PM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

Cette commande affiche la répartition des temps sur chaque CPUs. Un seul processeur très utilisé peut montrer une application comportant un seul thread.

La commande pidstat

La commande pidstat permet d’afficher des statistiques sur les processus. Par défaut, la commande affiche des statistiques sur le CPU (1 permet ici d’afficher les statistiques toutes les une seconde).

$ pidstat 1
12:11:50 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
12:11:51 PM  1000      5332    0.98    0.00    0.00    0.98     0  xfce4-terminal
12:11:51 PM  1000      5789    1.96    0.00    0.00    1.96     1  firefox
12:11:51 PM  1000     11105    0.98    0.98    0.00    1.96     1  pidstat

La commande permet d’afficher d’autres statistiques :

  • -d : I/O disque
  • -r : défauts de page et utilisation de la mémoire
  • -u : utilisation du CPU (par défaut)

Mémoire vive et swap

La commande pidstat -r

$ pidstat -r 1
07:34:41 AM   UID       PID  minflt/s  majflt/s     VSZ     RSS   %MEM  Command
07:34:42 AM  1000      1902      8.91      0.00    4188    1480   0.04  i3blocks
07:34:42 AM  1000      8453    674.26      0.00 2246952  596292  15.13  firefox
07:34:42 AM  1000     24406    287.13      0.00    6288    2340   0.06  pidstat
  • minflt/s : nombre de défauts de page mineurs fait par seconde. La page a été initialisée à 0 ou a été chargée depuis le cache de la mémoire de masse
  • majflt/s : nombre de défauts de page majeurs fait par seconde. Le chargement de cette page est fait depuis la mémoire de masse
  • VSZ (ou VIRT dans htop) représente la quantité mémoire virtuelle du processus (en Ko)
  • RSS (ou RES dans htop) représente la quantité mémoire vive utilisée par le processus (en Ko). Cette valeur n’inclut pas la swap

La commande free

$ free -m
            total        used        free      shared  buff/cache   available
Mem:           3855        1009          45         197        2800        2587
Swap:          4095           0        4095

La mémoire dans la colonne “buff/cache” représente de la mémoire qui est utilisé par Linux mais qui restent à dispositions pour les applications. La mémoire “buffers” est utilisé comme tampon pour les I/O des périphériques de type block. La mémoire cache est utilisé par les systèmes de fichiers pour la mise en cache des pages.

La colonne “available” est une estimation de la mémoire qui est disponible pour démarrer de nouvelles applications sans utiliser la mémoire swap.

Disque

La commande iostat

$ iostat -xz 1
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
        13.37    0.01    5.00    0.07    0.00   81.54

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.33     1.55    0.92    1.90    17.42    73.47    64.51     0.01    4.17    0.50    5.95   0.89   0.25
dm-0              0.00     0.00    1.25    3.18    17.31    73.47    40.91     0.01    3.36    0.86    4.35   0.57   0.25
dm-1              0.00     0.00    0.00    0.00     0.01     0.00    48.19     0.00    1.86    1.86    0.00   1.35   0.00
dm-2              0.00     0.00    0.00    0.00     0.01     0.00    48.19     0.00    1.23    1.23    0.00   0.60   0.00
dm-3              0.00     0.00    0.00    0.00     0.01     0.00    51.91     0.00    2.47    2.47    0.00   1.44   0.00

iostat est un outils permettant de surveiller la charge de travail et les performances des périphériques de type block.

  • r/s, w/s, rkB/s et wkB/s : ces colonnes correspondent respectivement au nombre de lecture/écriture par seconde ainsi qu’au nombre d’octets lu et écrit par seconde. On utilise ces valeurs pour regarder la charge sur les périphériques. Un problème de performance peut être simplement du à une trop grande charge de travail.
  • await : c’est le temps moyen d’une I/O. Les applications sont directement impactées par ce délais. Une valeur trop grande peut indiquer que le périphérique est trop utilisé ou qu’il y a un problème sur celui-ci.
  • avgqu-sz : le nombre moyen de requête à traiter par le périphérique. Une valeur supérieure à 1 indique une saturation du périphérique.
  • %util : le taux d’utilisation du périphérique. Des valeurs supérieures à 60% indiquent des performances assez faible tandis que des valeurs proches de 100% indiquent une saturation.

Réseau

La commande sar -n DEV 1

$ sar -n DEV 1
02:12:46 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
02:12:47 PM    wlp4s0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:12:47 PM   enp0s25      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:12:47 PM        lo     10.00     10.00      0.95      0.95      0.00      0.00      0.00      0.00

Cette commande permet de voir la charge sur les interfaces réseaux notamment avec les colonnes rxkB/s et txkB/s qui permettent de voir les débits entrant et sortant.

Résumé des commandes

Commande Package Utilisation
free procps-ng Mémoire
iostat sysstat Disque
mpstat sysstat CPU
sar sysstat CPU/Mémoire/Réseau/Disque
uptime procps-ng CPU
vmstat procps-ng CPU/RAM/Disque

Liens