Dépannage des performances lentes : Utilisation efficace de « netstat » et de « ss »

Maîtrisez les outils de réseau Linux essentiels, `netstat` et `ss`, pour un dépannage efficace des performances. Ce guide compare l'outil historique `netstat` avec l'utilitaire moderne et plus rapide `ss`, en fournissant des exemples de commandes pratiques. Apprenez à filtrer les résultats par état de connexion, à identifier les services en écoute et à diagnostiquer rapidement les goulots d'étranglement du réseau à l'aide des statistiques de socket Netlink.

33 vues

Dépannage des performances lentes : Utiliser efficacement « netstat » et « ss »

Lors du diagnostic de performances d'application lentes ou d'un comportement de connexion inattendu sur un système Linux, la pile réseau est souvent le premier endroit à examiner. Comprendre les connexions établies, en écoute et transitoires est crucial pour identifier les goulots d'étranglement, les processus défectueux ou les anomalies de sécurité. Historiquement, les administrateurs se fiaient fortement à l'utilitaire netstat. Cependant, les distributions Linux modernes privilégient l'utilitaire ss (statistiques de socket), plus rapide et plus riche en fonctionnalités.

Ce guide fournira une comparaison complète de netstat et ss, détaillant comment utiliser efficacement les deux outils pour surveiller les sockets TCP et UDP, analyser les états de connexion et identifier les problèmes de performance sur votre système.


Pourquoi surveiller les sockets réseau ?

La latence et la lenteur du réseau sont fréquemment liées à des problèmes de connexion plutôt qu'à une épuisement du CPU ou de la mémoire. La surveillance des sockets aide les administrateurs à répondre à des questions critiques telles que :

  • Quels ports sont activement en écoute pour les connexions ?
  • Y a-t-il trop de connexions bloquées dans les états SYN_RECV ou TIME_WAIT ?
  • Quel processus (PID) utilise un port spécifique ?
  • Des connexions sortantes inattendues se produisent-elles ?

En examinant les statistiques des sockets, vous pouvez rapidement écarter les problèmes de configuration réseau ou identifier la contention de ressources liée à la gestion des connexions.

L'outil hérité : netstat

netstat est l'utilitaire standard pour afficher les connexions réseau, les tables de routage, les statistiques d'interface et les connexions de masquage depuis des décennies. Bien qu'il soit obsolète au profit de ss sur de nombreux systèmes modernes, il reste largement disponible et souvent familier aux administrateurs de longue date.

Exemples courants de netstat

Les indicateurs les plus courants utilisés avec netstat fournissent un aperçu complet :

Indicateur Description
-a Affiche tous les sockets (en écoute et non en écoute)
-n Affiche les adresses numériques au lieu d'essayer de résoudre les noms d'hôtes et les noms de service (accélère la sortie)
-t Affiche les connexions TCP
-u Affiche les connexions UDP
-l Affiche uniquement les sockets en écoute
-p Affiche le PID/Nom du programme associé au socket (nécessite des privilèges root)

Exemple : Afficher toutes les connexions TCP actives numériquement

sudo netstat -ant

Exemple : Trouver ce qui écoute sur le port 80 (HTTP)

sudo netstat -antlp | grep ':80'

Comprendre les états de connexion (netstat)

Le résultat de netstat inclut souvent une colonne State (État). Les états clés à surveiller comprennent :

  • LISTEN : En attente de connexions entrantes.
  • ESTABLISHED : Une connexion active et ouverte.
  • TIME_WAIT : Un socket en attente pendant une courte période après la fermeture pour s'assurer que les paquets retardés sont gérés.
  • SYN_RECV : En attente de l'acquittement final d'une poignée de main en trois temps (peut indiquer une attaque SYN flood si excessive).

Avertissement concernant netstat : netstat dépend souvent de l'analyse des fichiers /proc/net/*, ce qui peut être lent, en particulier sur les systèmes avec un volume très élevé de connexions actives (des milliers). C'est la principale raison pour laquelle ss a été développé.

Le remplacement moderne : ss (Socket Statistics)

L'utilitaire ss est considérablement plus rapide que netstat car il récupère les informations de socket directement depuis l'espace noyau en utilisant les sockets Netlink, contournant les recherches lentes dans le système de fichiers.

Exemples courants de ss

La structure des indicateurs pour ss est très similaire à celle de netstat, favorisant une transition facile :

Indicateur Description
-a Affiche tous les sockets
-n Affiche les adresses numériques
-t Affiche les sockets TCP
-u Affiche les sockets UDP
-l Affiche les sockets en écoute
-p Affiche les informations de processus (PID/Programme)

Exemple : Afficher toutes les connexions TCP actives numériquement (Équivalent à netstat -ant)

ss -ant

Exemple : Trouver ce qui écoute sur le port 443 (HTTPS)

sudo ss -antlp | grep ':443'

Filtrage avancé avec ss

L'un des plus grands avantages de ss est sa capacité à effectuer un filtrage direct sur les états de connexion, ce qui est beaucoup plus efficace que de rediriger la sortie de netstat vers grep.

Filtrage par état de connexion

You pouvez utiliser l'option state directement dans la commande ss. Ceci est extrêmement utile pour diagnostiquer l'accumulation de connexions.

Trouver tous les sockets actuellement à l'état TIME-WAIT :

ss -s state time-wait

Trouver tous les sockets à l'état SYN-SENT (côté client attendant la réponse du serveur) :

ss -s state syn-sent

Filtrage par port ou adresse

Le filtrage par adresse/port de destination ou source est simple :

Afficher les connexions établies destinées au port 22 (SSH) :

ss -tn state established '( dport = :22 or sport = :22 )'

Afficher les connexions liées à une adresse IP locale spécifique :

ss -ant '( daddr = 192.168.1.100 or saddr = 192.168.1.100 )'

Analyse des performances : Comparaison netstat vs ss

Lors du dépannage, le choix entre les outils dépend souvent de la vitesse et du niveau de détail.

Caractéristique netstat ss
Vitesse Plus lent (Lit les fichiers) Beaucoup plus rapide (Utilise les sockets Netlink)
Syntaxe Mature, bien documentée Indicateurs similaires, options spécifiques plus récentes
Filtrage Nécessite une redirection vers grep Prise en charge native du filtrage par état et par adresse
Profondeur de l'information Bonne pour les bases Plus de détails sur les tailles de tampon de socket (Infos TCP)
Disponibilité Presque universel Standard sur les distributions Linux modernes

Diagnostic de l'établissement lent des connexions

Si les clients signalent des connexions lentes, vérifiez si des sockets sont bloqués en attente de poignées de main. Utiliser ss est le moyen le plus rapide de le déterminer :

  1. Vérifier les nombres élevés de SYN-RECV : Cela suggère que le serveur reçoit des demandes de connexion mais ne termine pas la poignée de main, souvent en raison d'une saturation des ressources ou d'une charge de trafic élevée.
    bash ss -s | grep syn-rec
  2. Vérifier les nombres élevés de SYN-SENT : Si le serveur lui-même initie de nombreuses connexions (par exemple, en agissant comme client auprès de bases de données ou d'autres API), cela indique qu'il attend des réponses.
    bash ss -s | grep syn-sent

Si vous observez des nombres exceptionnellement élevés dans l'une ou l'autre catégorie, l'application qui initie ces connexions est probablement confrontée à des problèmes de latence réseau ou de pare-feu.

Meilleures pratiques pour le dépannage réseau

  1. Utilisez toujours -n : Lors du dépannage des performances ou de l'écriture de scripts, utilisez l'indicateur numérique (-n) pour éviter les délais de résolution DNS, ce qui peut ralentir les diagnostics.
  2. Privilégiez ss : Adoptez ss comme outil par défaut. Réservez netstat uniquement aux systèmes hérités où ss n'est pas disponible.
  3. Exécuter en tant que Root pour le PID : Pour voir quel programme utilise un port, vous avez généralement besoin de sudo ou des privilèges root lors de l'utilisation de l'indicateur -p avec les deux utilitaires.
  4. Vérifier les statistiques d'interface : N'oubliez pas les compteurs d'interface. Utilisez ip -s link show <interface_name> pour vérifier les paquets supprimés ou les erreurs, ce qui pourrait indiquer un problème de couche physique plutôt qu'un problème de socket.

En maîtrisant les capacités modernes de ss et en comprenant le contexte fondamental fourni par netstat, les administrateurs système obtiennent un aperçu puissant de l'état réseau de n'importe quel hôte Linux, accélérant considérablement le diagnostic des performances.