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_RECVouTIME_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:netstatdé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 laquellessa é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 :
- 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 - 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
- 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. - Privilégiez
ss: Adoptezsscomme outil par défaut. Réserveznetstatuniquement aux systèmes hérités oùssn'est pas disponible. - Exécuter en tant que Root pour le PID : Pour voir quel programme utilise un port, vous avez généralement besoin de
sudoou des privilèges root lors de l'utilisation de l'indicateur-pavec les deux utilitaires. - 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.