Ich habe eine SLES-Maschine, die TCP-Verbindungen in einem CLOSE_WAIT-Status für immer ansammelt. Diese Deskriptoren saugen schließlich den gesamten verfügbaren Speicher auf. Im Moment habe ich 3037 davon, aber es war viel höher, bevor kürzlich ein schneller Neustart durchgeführt wurde.
Interessant ist, dass sie nicht von Verbindungen zu lokalen Ports stammen, von denen ich einen Abhörprozess erwarte. Sie haben keine zugeordneten PIDs und ihre Timer scheinen abgelaufen zu sein.
# netstat -ton | grep CLOSE_WAIT
tcp 176 0 10.0.0.60:54882 10.0.0.12:31663 CLOSE_WAIT off (0.00/0/0)
tcp 54 0 10.0.0.60:60957 10.0.0.12:4503 CLOSE_WAIT off (0.00/0/0)
tcp 89 0 10.0.0.60:50959 10.0.0.12:3518 CLOSE_WAIT off (0.00/0/0)
# netstat -tonp | grep CLOSE_WAIT
tcp 89 0 10.0.0.59:45598 10.0.0.12:1998 CLOSE_WAIT -
tcp 15 0 10.0.0.59:60861 10.0.0.12:1938 CLOSE_WAIT -
tcp 5 0 10.0.0.59:56173 10.0.0.12:1700 CLOSE_WAIT -
Ich bin kein Schwarzgurt, wenn es um den TCP-Stack oder das Kernel-Networking geht, aber die TCP-Konfiguration scheint vernünftig zu sein, da diese Werte laut Manpage Standard sind:
# cat /proc/sys/net/ipv4/tcp_fin_timeout
60
# cat /proc/sys/net/ipv4/tcp_keepalive_time
7200
Also was gibt es? Wenn die Timer abgelaufen sind, sollte der Stack diese Informationen dann nicht automatisch löschen? Ich gebe mir effektiv einen langfristigen DoS, wenn sich diese Dinge aufbauen.
quelle
sudo netstat -tonp
mit welchem Programm dies geschieht.Antworten:
Nein, es gibt kein Timeout für
CLOSE_WAIT
. Ich denke, dasoff
bedeutet das in Ihrer Ausgabe.Um herauszukommen
CLOSE_WAIT
, muss die Anwendung den Socket explizit schließen (oder beenden).Siehe So unterbrechen Sie CLOSE_WAIT .
Wenn
netstat
zeigt-
in der Prozesskolonne:quelle
CLOSE_WAIT
Gibt an, dass der Client die Verbindung schließt, die Anwendung sie jedoch noch nicht geschlossen hat oder nicht. Sie sollten identifizieren, welches Programm oder welche Programme dieses Problem haben. Versuchen Sie mitnetstat -tonp 2>&1 | grep CLOSE
festzustellen, welche Programme die Verbindungen halten.Wenn keine Programme aufgelistet sind, wird der Dienst vom Kernel bereitgestellt. Dies sind wahrscheinlich RPC-Dienste wie
nfs
oderrpc.lockd
. Listening-Kernel-Dienste können mit aufgelistet werdennetstat -lntp 2>&1 | grep -- -
.Sofern die RPC-Dienste nicht an feste Ports gebunden wurden, werden sie an kurzlebige Ports gebunden, wie Ihre Verbindungen zu zeigen scheinen. Möglicherweise möchten Sie auch die Prozesse und Bereitstellungen auf dem anderen Server überprüfen.
Möglicherweise können Sie Ihre NFS-Dienste an feste Ports binden, indem Sie folgende Schritte ausführen:
/etc/services
--port 32763 --outgoing-port 32764
--port 32765
quelle