OVH Cloud OVH Cloud

sockets TIME_WAIT

4 réponses
Avatar
Thomas
Bonjour,

Je suis sous 5.1-RELEASE-p10 et je rencontre un serieux probleme, j'ai plus
de 9000 (!!!) sockets dans un etat de "TIME_WAIT".
J'ai tue l'application qui les a ouvert mais cela fait plus de 3h qu'ils
sont dans cet etat. Comment m'en debarasser ?

Pour info :
---
thomas@chiyo ~>netstat -n -f inet | grep TIME_WAIT$ | wc -l
9051
---
thomas@chiyo ~>netstat -n -f inet | wc -l
9078
---
thomas@chiyo ~>netstat -n | wc -l
9176
---
kern.ipc.maxsockets: 9088
---
net.inet.tcp.always_keepalive: 0
---
net.inet.tcp.msl: 7500


Merci de votre aide.

4 réponses

Avatar
Bruno Rohee
In article <3ff83560$0$24043$, Thomas wrote:
Bonjour,

Je suis sous 5.1-RELEASE-p10 et je rencontre un serieux probleme, j'ai plus
de 9000 (!!!) sockets dans un etat de "TIME_WAIT".
J'ai tue l'application qui les a ouvert mais cela fait plus de 3h qu'ils
sont dans cet etat. Comment m'en debarasser ?

Pour info :
---
~>netstat -n -f inet | grep TIME_WAIT$ | wc -l
9051
---
~>netstat -n -f inet | wc -l
9078
---
~>netstat -n | wc -l
9176
---
kern.ipc.maxsockets: 9088
---
net.inet.tcp.always_keepalive: 0
---
net.inet.tcp.msl: 7500


Merci de votre aide.


Si net.inet.tcp.msl est bien le Maximum Segment Life en secondes tout est
normal. Une socket reste en TIME_WAIT pendant 2xMSL, le MSL étant le temps
de survie maximal possible d'un paquet dans le réseau. Initialement dans
le RFC 793 recommande un MSL de 2 minutes (120 secondes) mais avec
l'augmentatation de la vitesse des réseaux il est très raisonable de baisser
ça à moins d'une minutes voir 30 secondes. Dans ton cas, toujours si
net.inet.tcp.msl est bien le MSL en secondes tes sockets resteraient en
TIME_WAIT pendant 15000 secondes, soit plus de 4 heures.

Donc à moins que tu communiques en TCP avec quelqu'un sur Jupiter baisser
ton MSL semble être la bonne solution, et j'ai un peu de mal à croire que
7500 est la valeur par défaut, et je n'ai jamais vu un cas où il était
utile de la changer...

Avatar
Thomas
Bruno Rohee wrote:

Dans ton cas, toujours
si net.inet.tcp.msl est bien le MSL en secondes tes sockets resteraient en
TIME_WAIT pendant 15000 secondes, soit plus de 4 heures.


C'est en milliseconde donc la duree de vie est de 15 secondes.

j'ai un peu de mal à croire que
7500 est la valeur par défaut, et je n'ai jamais vu un cas où il était
utile de la changer...


La valeur par defaut etait 30 000, j'ai juste divise par 4 car c'est sur un
LAN.

Avatar
Bruno Rohee
In article <40125647$0$29078$, Thomas wrote:
Bruno Rohee wrote:

Dans ton cas, toujours
si net.inet.tcp.msl est bien le MSL en secondes tes sockets resteraient en
TIME_WAIT pendant 15000 secondes, soit plus de 4 heures.


C'est en milliseconde donc la duree de vie est de 15 secondes.


Deux solutions donc, un bug ou quelque chose qui ouvre reellement plein de
sockets sur ta machine...

Le bug pourquoi pas, j'ai jete un oeil a sys/netinet/tcp_timer.c et rien
de manifeste, par contre le message de commit passant de la version 1.45
a 1.46 conseille vaguement le sysctl suivant pour ceux qui ont des problemes
de TIME_WAIT....

net.tcp.tcp_seq_genscheme = 0

Bon courage c'est tres etrange tout ca...


Avatar
Thomas
j'ai jete un oeil a sys/netinet/tcp_timer.c et rien
de manifeste, par contre le message de commit passant de la version 1.45
a 1.46 conseille vaguement le sysctl suivant pour ceux qui ont des
problemes de TIME_WAIT....

net.tcp.tcp_seq_genscheme = 0

Bon courage c'est tres etrange tout ca...


Effectivement, je n'avais pas regarde de ce cote, merci pour l'info.

En complement d'information, je peux rajouter qu'apres mon premier post, le
nombre de sockets est arrive a saturation et la machine est devenu
inutilisable. Je l'ai donc reboote.
D'apres l'experience de mon entourage, certain sockets en TIME_WAIT peuvent
mettre plusieurs heures pour disparaitre (jusqu'a un jour, *TRES* rare,
mais ca existe).
Pour conclure peut etre qu'en attendant encore j aurais pu recuperer la main
sur la machine... helas personne ne le saura...