❦ 23 juillet 2013 09:29 CEST, Greg greg-frsag@duchatelet.net :
net.ipv4.tcp_tw_recycle=1 net.ipv4.tcp_tw_reuse=1
tcp_tw_recycle est très dangereux et peut causer divers problèmes difficiles à diagnostiquer, notamment une impossibilité pour certains clients d'établir la connexion.
A ce moment commence les recherches sur Google, et tout ce que je trouve est ambigu : il vaut mieux activer les timestamps TCP pour des raisons de performances, mais il faut mieux les désactiver pour des problèmes de sécurité. Activé, l'attaquant peut récupérer l'uptime du serveur... Franchement osef nan ? Ce qui me gène plus, c'est qu'il est conseillé d'activer ce paramètre en cas de soucis de congestion TCP...
Les timestamps te permettent d'obtenir une meilleure estimation du RTT qui est ensuite utilisé à pas mal d'endroits, notamment pour les retransmissions et la gestion des SACK.
A mon avis, tu ne devrais pas changer autant de choses dans les sysctl.
net.ipv4.tcp_sack = 1 net.ipv4.tcp_fack = 1 net.ipv4.tcp_window_scaling = 1
Ce sont les valeurs par défaut.
net.ipv4.tcp_syncookies = 0
Si tu fais ça pour supprimer le message indiquant l'activation des syncookies, tu empires juste le problème. Si tu as régulièrement un message à propos des syncookies, cela signifie que ton application ne suit pas derrière. Tu peux augmenter la listening queue au niveau de l'application de ou de l'OS pour fixer ça si besoin, mais fondamentalement, ça veut dire que y'a un soucis de charge sur l'appli. Les syncookies permettent de mitiger l'effet. Sans les syncookies, la connexion est simplement refusée.
net.core.netdev_max_backlog = 4000 net.ipv4.tcp_max_syn_backlog = 163840
Sans les syncookies, des valeurs aussi hautes, si elles sont ensuite suivies par les applications, vont juste remplir ta table de session avec des SYN_RECV.
net.ipv4.ip_local_port_range = 1024 65000
OK pour ça.
net.ipv4.tcp_synack_retries = 1
C'est plutôt agressif. Du point de vue de l'user, surtout s'il est sur un réseau mobile, cela va se traduire par des pages inaccessibles ou des images cassées.
net.ipv4.tcp_fin_timeout = 10
Généralement, on a pas beaucoup de FIN qui traînent.
net.ipv4.tcp_no_metrics_save = 1
Je le découvre. Vu le nom, je pense que cela signifie que Linux ne va pas stocker les caractéristiques d'un peer et recommencer de 0. Cela me semble une mauvaise idée.
net.ipv4.tcp_max_tw_buckets = 400000 net.ipv4.tcp_tw_recycle=1 net.ipv4.tcp_tw_reuse=1
C'est les trucs typiques que l'on met quand on s'affole du nombre de TIMEWAIT. La première valeur est calculée dynamiquement par le noyau. En mettre une fixe, c'est prendre le risque de ne plus être adapté dans 2 ans. Si tu n'as pas d'erreur concernant un nombre excessif de timewait, ce n'est pas la peine de changer cette valeur.
Pour résoudre le problème des TIMEWAIT, il ne faut pas tenter de les réduire. Ils ne posent problème que quand tu as un nombre limité de quadruplets. Genre un reverse proxy qui cause avec un backend sur le port 80. Ça fait environ 65k quadruplets possibles. Avec le TIMEWAIT qui dure une minute, ça te limite à 1000 connexions/s. Pour corriger ça, tu peux utiliser différents ports ou différentes IP.
net.core.somaxconn = 8192
À ne changer que si on a les messages sur les syncookies de manière régulière. Nécessite aussi une modif côté applicatif.
fs.file-max = 1310720
Oui.