TIME_WAIT und FIN_WAIT2 bringen Übertragung zum erliegen

Nitro86

Grünschnabel
Hallo,

ich habe folgendes Problem:
Es schließen sich auf einem Suse 10.2 Server die TCP-Verbindungen von einer Client-Anwendung nicht ordentlich, da jene schlecht programmiert ist. Meine Vermutung ist, dass die Clientseite die Beendigung der TCP-Verbindung nicht bestätigt, daraus folgt dann dass die TCP-Netzwerkverbindungen im Status TIME_WAIT hängen.

Erklärung: Der Server wartet auf ein eventuelles Paket vom Client bis zu einem gewissen Augenblick, dieser Augenblick wird durch den Timeout-Wert bestimmt. Normalerweise sollte aber die Clientseite bei keinem weiteren Paketversand die Verbindung schließen, so dass nicht zu viele TCP-Verbindungen im Zustand TIME_WAIT sind und die Übertragungen behindern.

Mein Lösungsansatz ist jetzt zu versuchen die Symptome anstatt der Ursache zu bekämpfen, indem ich den Timeout-Wert versuche zu senken. Mit den Programmierern habe ich schon versucht zu reden, jene meinen keinen Fehler begangen zu haben.

Wie setzte ich nun den Timeout für die Verbindungen im Linux?
 
Zuletzt bearbeitet:
Die einzige Möglichkeit die ich sehe, ist den Prozess hart abzuschießen(kill -9), was an sich aber eher schlechter Stil ist.

Sockets werden vom libc/Kernel verwaltet und es gibt IIRC (noch) kein tool welches auf den Socket aufsetzt und ihn schließt (und im Grunde ist dieses Vorgehen auch vom Aspekt der Sicherheit mit Argwohn zu betrachten).
 
Warum nennst du nicht einfach die Anwendung um die es sich handelt? Da könnte man sich wenigstens mal den Sourcecode ansehen ect. und auch so passt das ganze dann doch besser in eins der Programmierforen oder?
 
Es handelt sich um einen Firmeninterne Software, welche euch bestimmt nichts sagen wird. Auf den Linux Servern laufen verschieden JBosse, an welchen ich aber nur sehr ungern administriere, da sie alle par tage komplett ersetzt werden (so erfogt das Versionsupdate).

Ich habe jetzt folgendes vor:

Also werde ich tcp_fin_timeout niedriger setzen (Default AFAIK 60 Sekunden).

sysctl net.ipv4.tcp_fin_timeout // zeigt den momentanen Wert
sysctl -w net.ipv4.tcp_fin_timeout=<Z.B.: 30> // kann die Variable ändern

Was meint ihr dazu?
 
Zuletzt bearbeitet:
dann setz den Timeout eben testweise auf 30 bzw. 20 Sekunden. Im Lan sollte das ja kein Problem vonwegen Pings und Rechenzeit verursachen (Verbindungstimeout obwohl die Verbindung noch benötigt wird etc.)

Hier geht denke ich probieren über studieren.
 
Zurück