Si, lors de l'exécution de ss -lnt sur une instance Elastic Compute Service (ECS) Alibaba Cloud Linux 2, Send-Q affiche 0 pour tous les sockets en écoute, il s'agit d'une limitation connue du noyau et non d'un problème réseau. La mise à jour du noyau résout ce problème.
Symptômes
La commande ss -lnt produit un résultat similaire à l'exemple suivant, où Send-Q vaut 0 pour toutes les entrées :
# ss -lnt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 0 *:35107 *:*
LISTEN 0 0 *:38727 *:*
LISTEN 0 0 *:5355 *:*
LISTEN 0 0 *:111 *:*
Pour un socket TCP en écoute, Send-Q correspond à la taille maximale de la file d'attente syn, c'est-à-dire le nombre maximal de requêtes de connexion en attente que le socket peut mettre en file d'attente. Cette valeur est toujours non nulle sur un système sain.
Versions concernées
Ce problème concerne les instances exécutant les versions suivantes :
| Composant | Versions concernées |
|---|---|
| Image | aliyun-2.1903-x64-20G-alibase-20190507.vhd ou antérieure |
| Noyau | 4.19.43-13.al7.x86_64 ou antérieur |
Pour vérifier la version actuelle de votre noyau, exécutez la commande suivante :
uname -r
Cause
Le module noyau tcp_diag n'est pas inclus dans le noyau 4.19.43-13.al7.x86_64 ni dans les versions antérieures. En l'absence de tcp_diag, la commande ss lit par défaut les données depuis /proc/net/tcp (méthode non recommandée). Dans ce mode de repli, la valeur tx_queue des sockets TCP en écoute est systématiquement 0, ce qui force Send-Q à afficher 0.
Prérequis
Avant de mettre à jour le noyau :
Sauvegardez toutes les données critiques présentes sur l'instance.
Consultez les notes de version d'Alibaba Cloud Linux 2 pour prendre connaissance des changements de compatibilité introduits dans la version cible du noyau.
Planifiez la mise à jour en dehors des heures de pointe afin de minimiser l'impact sur le service.
Les mises à jour du noyau peuvent entraîner des problèmes de compatibilité et de stabilité. Consultez les notes de version avant de poursuivre. Le redémarrage de l'instance provoque son arrêt temporaire et risque d'interrompre les services en cours d'exécution, ce qui peut causer une perte de données. Sauvegardez vos données critiques avant tout redémarrage.
Solution
Étape 1 : Confirmer l'absence du module tcp_diag
sudo lsmod | grep tcp_diag
Interprétez le résultat comme suit :
Aucun résultat : Le module
tcp_diagn'est pas chargé. Cela confirme la cause racine ; passez à l'étape 2.Résultat affiché : Le module est chargé. La valeur
0deSend-Qa une autre origine. Poursuivez vos investigations avant de continuer.
Étape 2 : Mettre à jour le noyau
sudo yum update kernel
Étape 3 : Redémarrer l'instance
sudo reboot
Une fois l'instance redémarrée avec le nouveau noyau, le module tcp_diag est intégré et ss -lnt retourne des valeurs Send-Q correctes.