web-dev-qa-db-fra.com

tcp_tw_reuse vs tcp_tw_recycle: lequel utiliser (ou les deux)?

J'ai un site Web et une application qui utilisent un nombre important de connexions. Il a normalement environ 3 000 connexions statiquement ouvertes et peut recevoir de 5 000 à 50 000 tentatives de connexion en quelques secondes.

J'ai eu le problème de manquer de ports locaux pour ouvrir de nouvelles connexions en raison des sockets d'état TIME_WAIT. Même avec tcp_fin_timeout réglé sur une valeur faible (1-5), cela semblait simplement causer trop de surcharge/ralentissement, et il serait encore parfois impossible d'ouvrir un nouveau socket.

J'ai examiné tcp_tw_reuse et tcp_tw_recycle, mais je ne sais pas lequel d'entre eux serait le choix préféré, ou si l'utilisation des deux est une option.

50
Michael Marsee

Selon documentation Linux , vous devez utiliser l'indicateur TCP_TW_REUSE pour autoriser la réutilisation des sockets dans l'état TIME_WAIT pour les nouvelles connexions.

Cela semble être une bonne option lorsqu'il s'agit d'un serveur Web qui doit gérer de nombreuses connexions courtes TCP laissées dans un état TIME_WAIT.

Comme décrit ici , le TCP_TW_RECYCLE pourrait causer des problèmes lors de l'utilisation d'équilibreurs de charge ...

EDIT (pour ajouter des avertissements;)):

comme mentionné dans le commentaire de @raittes, les "problèmes lors de l'utilisation d'équilibreurs de charge" concernent les serveurs accessibles au public. Lorsque le recyclage est activé, le serveur ne peut pas distinguer les nouvelles connexions entrantes de différents clients derrière le même appareil NAT.

55
Cédric Julien

REMARQUE: net.ipv4.tcp_tw_recycle a été supprimé à partir de Linux4.12.

SOURCE: https://vincent.bernat.im/en/blog/2014-tcp-time-wait-state-linux

16
pevik