J'ai une machine SLES qui accumule les connexions TCP dans un état CLOSE_WAIT pour ce qui semble être éternel. Ces descripteurs finissent par aspirer toute la mémoire disponible. Pour le moment, j'en ai 3037, mais c'était beaucoup plus élevé avant un redémarrage rapide récemment.
Ce qui est intéressant, c'est qu'ils ne proviennent pas de connexions à des ports locaux auxquels je m'attends à avoir des processus d'écoute. Ils n'ont aucun PID associé, et leurs temporisateurs semblent avoir expiré.
# 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 -
Je ne suis pas une ceinture noire en ce qui concerne la pile TCP ou la mise en réseau du noyau, mais la configuration TCP semble raisonnable, car ces valeurs sont par défaut, selon la page de manuel:
# cat /proc/sys/net/ipv4/tcp_fin_timeout
60
# cat /proc/sys/net/ipv4/tcp_keepalive_time
7200
Alors qu'est-ce qui donne? Si les temporisateurs ont expiré, la pile ne devrait-elle pas effacer automatiquement ces éléments? Je me donne effectivement un DoS à long terme à mesure que ces choses s'accumulent.
sudo netstat -tonp
de voir avec quel programme cela se produit.