web-dev-qa-db-fra.com

Valeur saine pour net.ipv4.tcp_max_syn_backlog dans sysctl.conf

J'accorde sysctl.conf.

Selon un guide d'optimisation sur le site Web de linode, ce qui suit est une valeur saine à définir dans sysctl.conf:

net.ipv4.tcp_max_syn_backlog = 3240000

Cependant, le même valeur dans un guide d'optimisation archlinux est:

net.ipv4.tcp_max_syn_backlog = 65536

Enfin, sur un autre blog d'optimisation (qui est ancien mais qui reste assez élevé sur Google), la valeur est censée être:

net.ipv4.tcp_max_syn_backlog = 4096

Tous ces parcs à balles sont extrêmement différents. Quel est le raisonnement derrière la définition de cette valeur sur un nombre élevé (par rapport à un nombre faible)? Laquelle devrait être la valeur réelle "saine" pour commencer?

8
Hassan Baig

Cela dépend principalement de la quantité de trafic que vous exécutez via vos serveurs. Il y a plusieurs questions importantes:

  • Combien de connexions simultanées prévoyez-vous de gérer?
  • Quel est le temps de réponse moyen? (si la génération d'une réponse prend par exemple 10 à 50 secondes, vous pourriez facilement manquer de ressources, même sans attaque DDoS).
  • Quel serveur utilisez-vous? nginx, haproxy, varnish

Vous devez surveiller:

netstat -s | grep "SYNs to LISTEN"

ce qui est un symptôme que votre serveur supprime des paquets (parce que, par exemple, la file d'attente de backlog est pleine).

Les statistiques Netstat sont exportées vers /proc/net/netstat où la statistique est appelée ListenDrops. Il peut être plus facile d'analyser un script ou d'utiliser quelque chose comme:

cat /proc/net/netstat | awk '(f==0) { i=1; while ( i<=NF) {n[i] = $i; i++ }; f=1; next} \
    (f==1){ i=2; while ( i<=NF){ printf "%s = %d\n", n[i], $i; i++}; f=0}'

pour obtenir des noms de statistiques lisibles par l'homme. Vous devriez pouvoir collecter ces données en utilisant par exemple telegraf , collectd ou prometheus .

Réglage du noyau

net.ipv4.tcp_max_syn_backlog - Combien de connexions semi-ouvertes pour lesquelles le client n'a pas encore envoyé de réponse ACK peuvent être conservées dans la file d'attente (source) .

net.core.somaxconn Le nombre maximal de connexions pouvant être mises en file d'attente pour acceptation

net.core.netdev_max_backlog Le nombre maximum de paquets dans la file d'attente de réception qui sont passés par l'interface réseau et attendent d'être traités par le noyau.

Ces paramètres sont étroitement liés au nombre de fichiers ouverts (comme sous Linux, chaque nouvelle connexion ouvre 2 poignées de fichier). Vous pouvez vérifier vos limites en utilisant:

cat /proc/sys/fs/file-nr
8160    0       3270712

Ce qui signifie que le serveur a 8160 fichiers ouverts sur 3270712.

4
Tombart