it-swarm.com.de

tcp_tw_reuse vs tcp_tw_recycle: Was soll verwendet werden (oder beides)?

Ich habe eine Website und eine Anwendung, die eine erhebliche Anzahl von Verbindungen verwenden. Normalerweise sind etwa 3.000 Verbindungen statisch geöffnet. Innerhalb weniger Sekunden können zwischen 5.000 und 50.000 Verbindungsversuche unternommen werden.

Ich hatte das Problem, dass die lokalen Ports aufgrund von TIME_WAIT-Status-Sockets nicht mehr ausreichen, um neue Verbindungen zu öffnen. Selbst wenn tcp_fin_timeout auf einen niedrigen Wert (1-5) eingestellt war, schien dies zu viel Overhead/Verlangsamung zu verursachen, und es war gelegentlich immer noch nicht möglich, einen neuen Socket zu öffnen.

Ich habe mir tcp_tw_reuse und tcp_tw_recycle angesehen, bin mir aber nicht sicher, welche davon die bevorzugte Wahl wäre oder ob die Verwendung beider Optionen in Frage kommt.

50
Michael Marsee

Gemäß Linux-Dokumentation sollten Sie das TCP_TW_REUSE-Flag verwenden, um die Wiederverwendung von Sockets im TIME_WAIT-Status für neue Verbindungen zuzulassen.

Es scheint eine gute Option zu sein, wenn es sich um einen Webserver handelt, der viele kurze TCP Verbindungen verarbeiten muss, die in einem TIME_WAIT-Status verbleiben.

Wie beschrieben hier , kann TCP_TW_RECYCLE bei der Verwendung von Load Balancern zu Problemen führen ...

BEARBEITEN (um einige Warnungen hinzuzufügen;)):

wie im Kommentar von @raittes erwähnt, handelt es sich bei den "Problemen bei der Verwendung von Load Balancern" um öffentlich zugängliche Server. Wenn die Wiederverwendung aktiviert ist, kann der Server keine neuen eingehenden Verbindungen von verschiedenen Clients hinter demselben NAT Gerät unterscheiden.

55
Cédric Julien

HINWEIS: net.ipv4.tcp_tw_recycle wurde entfernt von Linux4.12.

QUELLE: https://vincent.bernat.im/de/blog/2014-tcp-time-wait-state-linux

16
pevik