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?
Cela dépend principalement de la quantité de trafic que vous exécutez via vos serveurs. Il y a plusieurs questions importantes:
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 .
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
.