Quel paramètre du noyau ou autres réglages contrôlent le nombre maximum de sockets TCP qui peuvent être ouverts sur un serveur Linux ? Quels sont les inconvénients de l'autorisation d'un plus grand nombre de connexions ?
J'ai remarqué en testant la charge d'un serveur Apache avec ab qu'il est assez facile de maximiser le nombre de connexions ouvertes sur le serveur. Si vous n'utilisez pas l'option -k d'ab, qui permet la réutilisation des connexions, et que vous lui demandez d'envoyer plus de 10 000 requêtes, Apache répond aux quelque 11 000 premières requêtes, puis s'arrête pendant 60 secondes. Un coup d'oeil à la sortie de netstat montre 11 000 connexions dans l'état TIME_WAIT. Apparemment, c'est normal. Les connexions sont maintenues ouvertes par défaut pendant 60 secondes, même après que le client en ait fini avec elles pour Raisons de la fiabilité du TCP .
Il semble que ce soit un moyen facile de détraquer un serveur et je me demande quels sont les réglages et les précautions habituels pour cela.
Voici le résultat de mon test :
# ab -c 5 -n 50000 http://localhost/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 5000 requests
Completed 10000 requests
apr_poll: The timeout specified has expired (70007)
Total of 11655 requests completed
Voici la commande netstat que j'exécute pendant le test :
# netstat --inet -p | grep "localhost:www" | sed -e 's/ \+/ /g' | cut -d' ' -f 1-4,6-7 | sort | uniq -c
11651 tcp 0 0 localhost:www TIME_WAIT -
1 tcp 0 1 localhost:44423 SYN_SENT 7831/ab
1 tcp 0 1 localhost:44424 SYN_SENT 7831/ab
1 tcp 0 1 localhost:44425 SYN_SENT 7831/ab
1 tcp 0 1 localhost:44426 SYN_SENT 7831/ab
1 tcp 0 1 localhost:44428 SYN_SENT 7831/ab