Aller au contenu principal

Optimisation des Performances d'un Serveur Linux

Dans le monde des serveurs, la performance est reine. Un serveur Linux efficace et bien entretenu est un atout essentiel pour toute entreprise ou projet. Cependant, avec la complexité croissante des systèmes et applications, il est inévitable que des problèmes de performance surviennent. La surveillance et l'optimisation des performances deviennent donc des compétences indispensables pour les administrateurs de systèmes.

Que vous gériez un petit serveur web ou une infrastructure de cloud complexe, comprendre et optimiser les performances de vos serveurs Linux est un élément clé pour assurer un service fiable et efficace.

Dans ce chapitre, nous verrons les fondamentaux de la surveillance des performances d'un serveur Linux. Nous explorerons les différentes formes de contentions qui peuvent survenir — mémoire, CPU, réseau et IO. Vous apprendrez quelques commandes pour détecter ces problèmes. Plus important encore, nous discuterons des stratégies pour corriger ces problèmes afin de maintenir vos serveurs en bonne santé.

Fondamentaux de la Surveillance de l'état de santé des serveurs Linux

La surveillance des performances des serveurs Linux doit être un processus continu ce qui implique de garder un œil sur les différentes ressources du système pour comprendre comment elles sont utilisées. Cela inclut la mémoire, le processeur (CPU), le réseau et les opérations d'entrée/sortie (IO). Une surveillance efficace permet non seulement de détecter les problèmes de performance dès qu'ils apparaissent, mais aussi de planifier des mises à niveau de manière proactive pour éviter les goulots d'étranglement.

Décryptage des métriques d'Utilisation du CPU : Idle, System, IOWait, User et Steal

Bien sûr, lorsque vous allez utiliser des commandes telles que vmstat, iostat, ou top sur un système Linux, vous rencontrerez différents termes qui décrivent l'utilisation du CPU. Comprendre ces termes est crucial pour interpréter correctement l'état du système. Voici une explication des types d'informations à maîtriser :

  1. CPU idle (%idle) : Cette valeur représente le pourcentage de temps durant lequel le processeur est inactif et n'exécute aucune tâche.

  2. CPU système (%sys) : Le temps CPU système représente le pourcentage de temps durant lequel le CPU était occupé à exécuter des tâches du noyau (kernel). Cela inclut le temps passé pour des choses comme la gestion des processus, la manipulation du système de fichiers et la gestion du réseau.

  3. CPU utilisateur (%user) : Ce pourcentage montre le temps passé par le CPU à exécuter des processus en mode utilisateur, c'est-à-dire le code des applications et des tâches initiées par l'utilisateur.

  4. Attente d'IO (%iowait) : Ce pourcentage montre la répartition de temps pendant lequel le CPU attendait que les opérations d'entrée/sortie (comme la lecture ou l'écriture sur un disque dur) se terminent.

  5. CPU volé (%steal) : Ce terme est souvent vu dans les environnements virtualisés. Il représente le pourcentage de temps que le CPU a été alloué à une autre machine virtuelle par l'hyperviseur.

Chacune de ces métriques donne un aperçu de la façon dont le CPU est utilisé et peut aider à diagnostiquer différents types de problèmes de performance. Par exemple, un %iowait élevé peut indiquer un problème d'IO, tandis qu'un %idle élevé pourrait signifier que le système dispose de ressources CPU suffisantes voir trop.

Qu'est-ce que load average ?

Le "load average" est un indicateur crucial pour mesurer la charge de travail d'un système d'exploitation Unix, comme Linux. Il fournit une moyenne du nombre de processus qui sont soit activement en cours d'exécution, soit en attente d'exécution par le processeur (CPU).

Une des commandes à utiliser pour afficher cette information est uptime :

uptime
 11:05:07 up 15 days,  5:57,  1 user,  load average: 2,70, 2,40, 2,07

Composantes du Load Average

Le load average est généralement présenté sous trois valeurs numériques, par exemple, 0.75, 0.50, 0.25, qui représentent la charge moyenne du système sur trois périodes de temps différentes :

  1. La première valeur montre la charge moyenne du système au cours de la dernière minute. Elle donne une idée de la charge actuelle du système.
  2. La seconde valeur reflète la charge moyenne sur les 5 dernières minutes. Elle lisse les fluctuations de charge à court terme.
  3. La troisième valeur indique la charge moyenne sur les 15 dernières minutes. Elle offre une vision plus longue et peut indiquer une tendance générale.

Interprétation du Load Average

Il est important de considérer le nombre de cœurs CPU lors de l'interprétation du load average. Par exemple, un load average de 2.0 est surchargé pour un système mono-cœur, mais normal pour un système quadricœur. Il faut diviser les valeurs par le nombre de coeurs pour évaluer les informations :

  • Valeurs Inférieures à 1.0 : Une valeur inférieure à 1.0 suggère que le CPU n'est pas entièrement sollicité et qu'il y a des cycles CPU inutilisés.
  • Valeurs Égales à 1.0 : Cela signifie que le CPU est entièrement utilisé, mais sans surcharge.
  • Valeurs Supérieures à 1.0 : Cela signifie que les processus doivent attendre pour accéder au CPU.

Les différents types de contention

Contention Mémoire

La mémoire est un composant crucial de tout système informatique et sa gestion efficace est essentielle pour le bon fonctionnement d'un serveur Linux. La contention mémoire se produit lorsque les demandes de mémoire dépassent la quantité disponible, entraînant des ralentissements et des problèmes de performance.

Contention CPU

La contention CPU se réfère à une situation où les demandes de traitement dépassent les capacités du processeur, entraînant des ralentissements et des performances médiocres. Cette situation peut être causée par un nombre élevé de processus en cours d'exécution, des applications gourmandes en ressources ou une mauvaise répartition de la charge de travail.

Contention Réseau

La contention réseau fait référence à des situations où la bande passante du réseau est saturée ou mal utilisée, entraînant des ralentissements et des retards dans la communication des données. Ce problème peut être causé par un trafic réseau excessif, une mauvaise configuration du réseau, ou des problèmes matériels.

Contention IO

La contention IO (Input/Output) fait référence aux problèmes de performance causés par une sollicitation excessive des systèmes de stockage, tels que les disques durs et les SSD. Ces problèmes peuvent se manifester par des ralentissements dans l'accès aux fichiers, des délais dans les opérations de lecture et d'écriture et une dégradation générale des performances du serveur.

Les principales commandes d'analyse

Linux offre une variété d'outils en ligne de commande pour surveiller les performances. Ces outils sont puissants, légers et disponibles dans la plupart des distributions Linux. Voici quelques-uns des outils les plus utilisés :

  • top et htop : Ces outils fournissent un aperçu en temps réel de l'utilisation du système, y compris le CPU, la mémoire et les processus en cours. htop est une version améliorée de top avec une meilleure interface utilisateur et des fonctionnalités supplémentaires.

  • iotop : Cet outil se concentre sur l'activité d'entrée/sortie du disque, montrant quels processus sont les plus gourmands en IO.

  • vmstat : vmstat (Virtual Memory Statistics) affiche des informations sur les processus, la mémoire, le paging, les blocs IO, les interruptions et l'activité du processeur.

Détecter et corriger les différents types de contention

La contention mémoire

Un pourcentage élevé d'*Un pourcentage élevé d'IOWait (%iowait) peut indiquer une contention de mémoire sur un serveur Linux. Voici pourquoi :

  • Lorsque la mémoire (RAM) d'un système est insuffisante pour les besoins en cours, cela peut entraîner une utilisation accrue de l'espace de swap, qui est une mémoire virtuelle située sur le disque dur.
  • Les opérations de swap (échanger des données entre la RAM et le disque) sont nettement plus lentes que les opérations en mémoire vive. Cela provoque des ralentissements, car le CPU doit attendre la fin des opérations d'entrée/sortie (IO) sur le disque (notamment le swap) avant de pouvoir poursuivre son travail.
  • Par conséquent, un pourcentage élevé d'IOWait peut indiquer que le système passe beaucoup de temps à attendre que les opérations liées au swap sur le disque soient terminées, ce qui peut être un symptôme de contention de mémoire.
  • D'autres processus peuvent provoquer de l'IOWait et c'est là qu'entre en jeu la commande iotop qui est identique à la commande top dans le sens où elle est utilisée pour afficher l'utilisation des E/S du disque ainsi que la liste en cours des processus ou des threads qui en sont responsables.
Total DISK READ:         3.78 M/s | Total DISK WRITE:        23.66 K/s
Current DISK READ:       3.77 M/s | Current DISK WRITE:      41.41 K/s
    TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
   1027 idle root       35.49 K/s    0.00 B/s  ?unavailable?  NetworkManager --no-daemon
   2079 idle libvirt-   14.79 K/s    0.00 B/s  ?unavailable?  qemu-system-x86_64 -name guest=my-vagrant-box_internal,debug-thre~eny,spawn=deny,resourcecontrol=deny -msg timestamp=on [CPU 5/KVM]
   4114 be/0 bob        70.98 K/s    0.00 B/s  ?unavailable?  Xorg vt2 -displayfd 3 -auth /run/user/1000/gdm/Xauthority -nolisten tcp -background none -noreset -keeptty -novtswitch -verbose 3
   4378 be/0 bob        68.03 K/s    0.00 B/s  ?unavailable?  gnome-shell
   4505 idle bob        50.28 K/s    0.00 B/s  ?unavailable?  xdg-desktop-portal-gnome

En revanche, les autres mesures comme %idle, %sys (système), et %user (utilisateur) ne sont pas directement liées à la contention de mémoire.

Les outils d'analyse

Pour surveiller l'utilisation de la mémoire, plusieurs commandes peuvent être utilisées :

  • free -m : Cette commande donne un aperçu rapide de l'utilisation de la mémoire en Mo, y compris la mémoire totale, utilisée, libre, ainsi que l'utilisation du swap.

    free -m
                  total       utilisé      libre     partagé tamp/cache   disponible
    Mem:           23341       18166        1107          30        4066        3280
    Échange:      20479        7984       12494
    
  • vmstat : En plus des statistiques sur la mémoire, vmstat fournit des informations sur les processus, l'IO, le CPU et le système de pagination.

    Exemple d'utilisation basique :

    vmstat 1 5
    procs ----------mémoire---------- -échange- -----io---- -système- ------cpu-----
    r  b   swpd  libre tampon  cache   si   so    bi    bo   in   cs us sy id wa st
    3  0 7839252 1703252  22096 4457068   46   60    96   165    4    6  6  5 89  0  0
    2  0 7839252 1700228  22104 4457280    8    0    52   228 9765 10911  2  6 92  0  0
    7  0 7839252 1697456  22224 4457460   20    0   272    40 16092 13811  2  5 92  0  0
    

    Cette commande affiche des statistiques toutes les 1 seconde et ce 5 fois. Elle montre des informations telles que le swap, la mémoire, l'activité d'IO, et l'utilisation du CPU.

  • top : En affichant les processus en cours et leur consommation de mémoire, top aide à identifier les applications qui utilisent le plus de ressources mémoire.

    top - 22:55:07 up 14 days, 17:47,  1 user,  load average: 1,70, 1,57, 1,55
    Tâches: 500 total,   3 en cours, 497 en veille,   0 arrêté,   0 zombie
    %Cpu(s):  1,6 ut,  5,4 sy,  0,6 ni, 91,3 id,  0,2 wa,  0,0 hi,  0,9 si,  0,0 st
    MiB Mem :  23341,6 total,    895,5 libr,  18372,8 util,   4073,3 tamp/cache
    MiB Éch:  20479,5 total,  12483,6 libr,   7995,9 util.   3068,0 dispo Mem
    
        PID UTIL.     PR  NI    VIRT    RES    SHR S  %CPU  %MEM    TEMPS+ COM.
        95 root      25   5       0      0      0 R  42,6   0,0 846:24.32 ksmd
    2426205 bob       20   0 1136,9g 291824  70824 R  10,9   1,2   3:50.68 code
      4378 bob       17  -3 6541376 747360  18972 S   5,9   3,1 517:35.66 gnome-shell
    2426146 bob       20   0 1123,0g 103000  77872 S   4,6   0,4   0:28.78 code
    2098006 root      32  12  998560 203828  19712 S   4,0   0,9  49:12.19 kube-apiserver
      4114 bob       17  -3 1106876  31828   5356 S   3,3   0,1 172:41.57 Xorg
    2426186 bob       20   0   32,6g  66976  49068 S   3,0   0,3   0:48.76 code
    

Stratégies de correction

Lorsque des problèmes de mémoire sont détectés, plusieurs actions peuvent être entreprises :

  • Ajout de Mémoire Physique : Si le serveur est régulièrement à court de mémoire, la solution la plus directe est d'augmenter la mémoire physique disponible.
  • Optimisation des Applications : Examiner les applications qui consomment le plus de mémoire et chercher des moyens de les rendre plus efficaces. Cela peut impliquer la mise à jour de l'application, la modification de sa configuration ou la réduction de son utilisation de la mémoire.
  • Configuration du Swap : Le swap est une extension de la mémoire physique sur le disque dur. Bien qu'il soit plus lent que de la RAM, il peut aider à gérer les pics temporaires d'utilisation de la mémoire. Il est important de configurer la taille du swap de manière appropriée pour votre système.
  • Utilisation d'Outils de Profilage : Un outil comme Valgrind peut être utilisé pour profiler l'utilisation de la mémoire par les applications et détecter les fuites de mémoire.

Un mot sur l'oomKiller

L'OOM-Killer, ou "Out-Of-Memory Killer", est un mécanisme intégré au noyau Linux conçu pour gérer les situations extrêmes où le système manque de mémoire vive (RAM). Lorsque Linux détecte qu'il est à court de mémoire et qu'il ne peut pas allouer plus de RAM pour les processus en cours, l'OOM-Killer est déclenché pour résoudre cette situation critique.

Voici comment cela fonctionne :

  1. Détection de Manque de Mémoire : Lorsque le système n'a plus assez de mémoire libre pour répondre aux demandes d'allocation de mémoire des processus, il entre dans un état de stress de la mémoire.
  2. Sélection des Processus à Terminer :
  • L'OOM-Killer évalue tous les processus en cours d'exécution et attribue à chacun un score basé sur divers critères, tels que la quantité de mémoire utilisée, le temps d'exécution, l'importance pour le système, etc.
  • Les processus qui consomment le plus de mémoire et qui ont un impact moindre sur le fonctionnement du système ont tendance à recevoir un score plus élevé, les rendant plus susceptibles d'être terminés.
  1. Terminaison des Processus : Le processus (ou les processus) avec le score le plus élevé est alors automatiquement terminé par le noyau. Cette action libère de la mémoire, permettant au système de continuer à fonctionner.
  2. Conséquences : - Bien que l'OOM-Killer soit une mesure de dernier recours pour éviter un crash du système, la terminaison de processus peut entraîner la perte de données non sauvegardées ou l'interruption de services critiques.

Il est important de noter que l'activation de l'OOM-Killer indique souvent un problème sous-jacent avec la gestion de la mémoire sur le serveur. Cela peut être dû à une configuration insuffisante de la mémoire, à des fuites de mémoire dans les applications, ou à une surcharge de travail. Par conséquent, si l'OOM-Killer est fréquemment déclenché, il est conseillé d'enquêter sur la cause et d'optimiser la gestion de la mémoire ou de mettre à niveau les ressources matérielles si nécessaire.

Comment savoir si l'oommKiller est entré en action ?

Les informations sur les activités de l'OOM-Killer (Out-Of-Memory Killer) sous Linux sont généralement enregistrées dans les logs du noyau. Voici les emplacements typiques où vous pouvez trouver ces informations :

  • Log du noyau (/var/log/kern.log) :
    • C'est l'emplacement le plus courant pour trouver les logs relatifs à l'OOM-Killer. Les événements OOM-Killer sont enregistrés avec des détails sur le processus qui a été tué pour libérer de la mémoire.
  • *Log des messages système (/var/log/messages) :
    • Sur certaines distributions Linux, les logs du noyau et les autres messages systèmes importants sont également enregistrés dans /var/log/messages.
  • Buffer de log du noyau (dmesg) :
    • Vous pouvez exécuter la commande dmesg pour afficher les messages du buffer de log du noyau. Les entrées récentes liées à l'OOM-Killer peuvent être trouvées ici. Pour voir les entrées les plus récentes, vous pouvez utiliser dmesg | tail.
  • Journalctl (sur les systèmes avec systemd) :
    • Sur les systèmes qui utilisent systemd, vous pouvez utiliser la commande journalctl pour interroger les logs du système. Par exemple, journalctl -k affichera les messages du noyau, y compris ceux liés à l'OOM-Killer.

Lorsque vous examinez ces logs, cherchez des lignes contenant "oom-killer" ou "Out of Memory". Ces entrées devraient fournir des détails sur le processus ou les processus qui ont été terminés, la quantité de mémoire qu'ils utilisaient, et d'autres informations pertinentes qui peuvent aider à diagnostiquer la cause du problème de mémoire.

La contention CPU

Un pourcentage élevé dans certaines métriques spécifiques de l'utilisation du CPU peut indiquer une contention ou un goulot d'étranglement du CPU dans un système. Voici comment interpréter ces métriques :

  • Un pourcentage élevé dans cette catégorie indique que de nombreuses applications et processus en mode utilisateur sollicitent activement le CPU. Cela peut être normal si de lourdes applications ou des tâches intensives en calcul sont exécutées, mais si ce taux reste élevé en permanence, cela peut signaler une surcharge ou une utilisation inefficace des ressources par les applications.
  • Un pourcentage élevé en mode système suggère que le CPU passe beaucoup de temps à gérer les opérations du noyau du système d'exploitation, comme la gestion des processus, le réseau, ou les opérations sur les fichiers. Une valeur constamment élevée peut indiquer une charge excessive sur le système, potentiellement due à des configurations inappropriées, à un grand nombre de processus systèmes actifs, ou à des pilotes matériels sollicitant intensivement le CPU.
  • Un pourcentage élevé d'attente d'IO signifie que le CPU attend souvent que les opérations d'entrée/sortie se terminent. Bien que cela ne soit pas directement un indicateur de contention CPU, un pourcentage élevé d'iowait peut signifier que les performances globales du système sont affectées en raison de goulots d'étranglement sur les disques. Cela peut indirectement surcharger le CPU car les processus restent plus longtemps dans la file d'attente.
  • Dans les environnements virtualisés, un pourcentage élevé de CPU volé peut indiquer que la machine virtuelle n'a pas suffisamment de temps CPU alloué, car l'hyperviseur le redistribue à d'autres machines virtuelles. Cela peut indiquer une contention de ressources au niveau de l'hyperviseur ou une allocation insuffisante de ressources CPU pour la machine virtuelle concernée.

En résumé, des valeurs élevées en %user et %sys peuvent directement indiquer une contention CPU, tandis que des valeurs élevées en %iowait et %steal pointent vers des problèmes indirects affectant les performances du CPU. Une analyse approfondie est nécessaire dans chaque cas pour déterminer la cause exacte et trouver des solutions appropriées.

Les outils d'analyse

Pour identifier les problèmes liés au CPU, les administrateurs peuvent utiliser divers outils comme :

  • top ou htop : Ces outils affichent l'utilisation du CPU en temps réel par tous les processus. Ils permettent de voir rapidement quels processus consomment le plus de ressources CPU. Exemple ci-dessus

  • mpstat : Faisant partie du paquet sysstat, mpstat affiche des statistiques détaillées sur l'utilisation du CPU, y compris l'utilisation par cœur, ce qui est utile pour identifier les déséquilibres dans la répartition de la charge.

    Exemple pour afficher l'utilisation de chaque cœur du CPU :

    mpstat -P ALL 1
    
    Linux 6.5.6-76060506-generic (pop-os)   10/11/2023      _x86_64_        (12 CPU)
    
    22:58:31     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
    22:58:32     all    2,95    1,60    4,72    0,34    0,00    0,93    0,00    0,00    0,08   89,38
    22:58:32       0    2,91    2,91    0,97    0,00    0,00    5,83    0,00    0,00    0,00   87,38
    22:58:32       1    2,94    5,88    2,94    0,00    0,00    1,96    0,00    0,00    0,00   86,27
    
  • sar : Egalement partie de sysstat, sar recueille, rapporte et sauvegarde des données sur l'activité du système, y compris l'utilisation du CPU, ce qui permet de suivre l'évolution de l'utilisation du CPU dans le temps.

    Exemple pour afficher les statistiques du CPU à intervalles réguliers :

    sar -u 1 10
    
    Linux 6.5.6-76060506-generic (pop-os)   10/11/2023      _x86_64_        (12 CPU)
    
    23:00:33        CPU     %user     %nice   %system   %iowait    %steal     %idle
    23:00:34        all      0,51      0,67      5,72      0,08      0,00     93,01
    23:00:35        all      1,02      0,68      6,26      0,08      0,00     91,96
    

    Cette commande affiche les statistiques du CPU toutes les secondes (1) pour un total de 10 intervalles (10). Elle montre des informations telles que le pourcentage d'utilisation du CPU en mode utilisateur (%user), en mode système (%system), en idle (%idle) et d'autres.

Stratégies de correction

Une fois les problèmes de CPU identifiés, plusieurs solutions peuvent être envisagées :

  • Optimisation du Code : Si une application spécifique utilise de manière excessive le CPU, il peut être nécessaire d'optimiser son code pour réduire sa charge.
  • Équilibrage de Charge : Distribuer la charge de travail entre plusieurs serveurs ou processeurs peut aider à réduire la contention CPU.
  • Mise à Niveau du Matériel : Si l'utilisation élevée du CPU est constante et n'est pas due à un problème logiciel, envisager une mise à niveau du processeur ou l'ajout de processeurs supplémentaires.
  • Priorisation des Processus : Utiliser des commandes comme nice et renice pour ajuster la priorité des processus, donnant la préférence aux tâches critiques.

La contention IO

Un pourcentage élevé dans la catégorie %iowait (attente d'IO) est généralement un indicateur de contention IO sur un serveur Linux. Voici une brève explication :

  • Lorsque le pourcentage %iowait est élevé, cela signifie que le processeur passe beaucoup de temps à attendre que les opérations d'entrée/sortie (IO) se terminent.
  • Cela peut se produire si le disque dur ou le système de stockage est surchargé ou sous-performant, ce qui oblige le CPU à attendre plus longtemps que la normale pour que les opérations de lecture ou d'écriture sur le disque soient complétées.
  • Un %iowait élevé est souvent accompagné d'une lenteur perceptible dans le système, car les processus nécessitant un accès au disque peuvent être retardés.

En surveillant %iowait, les administrateurs systèmes peuvent identifier les goulots d'étranglement liés aux performances du disque et prendre des mesures appropriées, comme l'optimisation des systèmes de fichiers, l'ajout de disques plus rapides (comme les SSD), ou la reconfiguration des paramètres de stockage pour améliorer les performances globales.

Les outils d'analyse

Pour identifier et surveiller les problèmes d'IO sur un serveur Linux, plusieurs outils sont disponibles :

  • iotop : Affiche une liste des processus qui effectuent des opérations d'entrée/sortie en temps réel, permettant de voir quels processus mettent le plus de pression sur le système de stockage.

  • iostat : Fait partie du paquet sysstat et fournit des statistiques détaillées sur l'utilisation du disque, y compris la performance de lecture/écriture et le temps d'attente des IO.

    iostat 2 5
    Linux 6.5.6-76060506-generic (pop-os)   10/11/2023      _x86_64_        (12 CPU)
    
    avg-cpu:  %user   %nice %system %iowait  %steal   %idle
              2,93    3,31    4,60    0,15    0,00   89,01
    
    Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
    dm-0              0,07         0,11         0,16         0,00     141073     197664          0
    loop0             0,00         0,00         0,00         0,00         21          0          0
    ...
    loop8             0,00         0,09         0,00         0,00     110790          0          0
    loop9             0,00         0,00         0,00         0,00       2439          0          0
    nvme0n1          19,64       204,12       433,61       188,95  260139132  552595742  240799384
    zram0           109,29       191,68       246,22         0,00  244286932  313794048          0
    
  • sar : Utilisé pour collecter, rapporter et sauvegarder des données sur l'activité IO, ce qui aide à analyser les tendances et les modèles d'utilisation des disques sur une période prolongée.

    sar -b 1 5
    
    Linux 6.5.6-76060506-generic (pop-os)   10/11/2023      _x86_64_        (12 CPU)
    
    23:07:16          tps      rtps      wtps      dtps   bread/s   bwrtn/s   bdscd/s
    23:07:17        32,00     11,00     21,00      0,00    168,00    128,00      0,00
    23:07:18       112,00      8,00    104,00      0,00     88,00   1352,00      0,00
    

Stratégies de correction

Lorsque des problèmes d'IO sont identifiés, plusieurs approches peuvent être adoptées pour les résoudre :

  • Optimisation des Systèmes de Fichiers : Choisir et configurer le système de fichiers le plus adapté à vos besoins peut améliorer considérablement les performances IO. Des options comme ext4, XFS, ou Btrfs offrent différents avantages en termes de vitesse et de gestion efficace des données.

  • Utilisation de RAID : Le RAID (Redundant Array of Independent Disks) peut améliorer les performances IO en répartissant les données sur plusieurs disques, réduisant ainsi la charge sur un seul disque.

  • Migration vers SSD : Remplacer les disques durs mécaniques par des SSD peut offrir une amélioration significative des performances, notamment en termes de temps d'accès et de débit.

  • Réglage des Paramètres IO : Ajuster les paramètres du noyau liés aux IO, tels que les tailles de cache et les politiques d'ordonnancement des disques, peut optimiser les performances.

La contention réseau

Un pourcentage élevé de CPU dans la catégorie %iowait (attente d'IO) n'est généralement pas directement lié à une contention réseau. Toutefois, il peut y avoir des situations indirectes où des problèmes de réseau affectent les opérations d'IO, surtout si votre serveur dépend fortement des opérations d'entrée/sortie sur le réseau, comme c'est le cas avec les serveurs de fichiers, les bases de données distribuées ou le stockage en réseau (NAS/SAN).

Les outils d'analyse

Pour identifier spécifiquement une contention réseau, vous devriez plutôt vous concentrer sur d'autres outils et mesures tels que :

  • Utilisation de la bande passante (à l'aide d'outils comme iftop, nload, ou bmon).
  • Statistiques de réseau (avec des commandes comme netstat, ss, ou ip -s).
  • Latences et pertes de paquets (via des outils comme ping, traceroute, ou mtr).

Pour surveiller et détecter les problèmes de réseau sur un serveur Linux, les administrateurs peuvent s'appuyer sur plusieurs outils :

  • netstat : Fournit des informations sur les connexions réseau, les tables de routage, les statistiques des interfaces réseau, etc. C'est un outil essentiel pour comprendre l'état des connexions réseau.

    netstat -a
    Connexions Internet actives (serveurs et établies)
    Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat
    tcp        0      0 0.0.0.0:38287           0.0.0.0:*               LISTEN
    tcp        0      0 0.0.0.0:37645           0.0.0.0:*               LISTEN
    tcp        0      0 0.0.0.0:40863           0.0.0.0:*               LISTEN
    tcp        0      0 0.0.0.0:8010            0.0.0.0:*               LISTEN
    tcp        0      0 pop-os:domain           0.0.0.0:*               LISTEN
    
  • iftop : Affiche l'utilisation de la bande passante par connexion ou par hôte en temps réel, ce qui est utile pour identifier les goulots d'étranglement du réseau.

  • nload : Cet outil fournit un aperçu graphique de l'utilisation de la bande passante entrante et sortante, facilitant l'identification des pics d'utilisation.

    Surveiller une interface réseau spécifique :

    nload dev eth0
    
  • iptraf-ng : Offre des statistiques détaillées sur le trafic réseau, y compris les données par interface et par protocole.

Stratégies de correction

En cas de détection de problèmes de réseau, plusieurs mesures peuvent être prises pour améliorer la situation :

  • Optimisation de la Configuration Réseau : Revoir et ajuster les configurations réseau, comme les règles de pare-feu, le routage et les paramètres de QoS (Quality of Service).
  • Augmentation de la Bande Passante : Si le trafic réseau est constamment élevé, il peut être nécessaire d'augmenter la capacité de bande passante du serveur.
  • Utilisation de Techniques de Mise en Cache : Mettre en œuvre des solutions de mise en cache peut réduire la charge sur le réseau en stockant localement des données fréquemment demandées.
  • Mise à Jour du Matériel Réseau : Remplacer ou mettre à niveau le matériel réseau (comme les cartes réseau, les commutateurs, les routeurs) peut améliorer les performances.
  • Segmentation du Réseau : Diviser le réseau en segments plus petits peut réduire la congestion et améliorer les performances.

Autres commandes linux

  • lsof : Liste les fichiers ouverts par les processus. Très utile pour identifier les fichiers qui sont actuellement utilisés par les applications et pour diagnostiquer les problèmes liés aux fichiers.
  • dstat : Cet outil est une alternative polyvalente à vmstat, iostat, et ifstat. dstat permet de visualiser simultanément toutes les statistiques système importantes, y compris le CPU, la mémoire, le disque et le réseau.
  • glances : Un outil de surveillance du système qui présente diverses informations sur l'interface, y compris l'utilisation du CPU, de la mémoire, du disque, du réseau et des processus.

Bonnes pratiques

Surveillance Proactive

La surveillance proactive consiste à surveiller régulièrement et systématiquement le système pour détecter les anomalies avant qu'elles ne deviennent critiques. Elle implique :

  • Configuration des Alertes : Utiliser des outils comme Nagios, Prometheus, ou Zabbix pour configurer des alertes basées sur des seuils spécifiques de l'utilisation des ressources.

  • Analyse des Tendances : Garder des historiques des performances pour identifier les tendances, comme une augmentation progressive de l'utilisation du CPU ou de la mémoire, ce qui peut indiquer un besoin imminent de mise à niveau ou d'optimisation.

  • Maintenance Régulière : Effectuer des vérifications régulières et des maintenances, comme les mises à jour du système et des applications, pour garantir que le serveur fonctionne avec les dernières optimisations de sécurité et de performance.

Conclusion

Dans ce chapitre, nous avons exploré en détail les aspects cruciaux de la surveillance et de l'optimisation des performances d'un serveur Linux. Nous avons discuté des outils et techniques pour identifier et résoudre les problèmes liés à la mémoire, au CPU, au réseau et aux opérations d'entrée/sortie (IO), fournissant des exemples concrets d'utilisation des commandes pour une meilleure compréhension pratique.