La définition net.core.somaxconn
de valeurs plus élevées n'est nécessaire que sur les serveurs surchargés où le nouveau taux de connexion est si élevé / en rafale que d'avoir 128 (50% de plus dans les BSD: 128 backlog
+ 64 half-open
) des connexions non encore acceptées est considéré comme normal. Ou lorsque vous devez déléguer la définition de "normal" à une application elle-même.
Certains administrateurs utilisent high net.core.somaxconn
pour masquer les problèmes avec leurs services, donc du point de vue de l'utilisateur, cela ressemblera à un pic de latence au lieu d'une connexion interrompue / timeout (contrôlé par net.ipv4.tcp_abort_on_overflow
sous Linux).
listen(2)
le manuel dit - net.core.somaxconn
agit uniquement la limite supérieure pour une application qui est libre de choisir quelque chose de plus petit (généralement défini dans la configuration de l'application). Bien que certaines applications n'utilisent que listen(fd, -1)
ce qui signifie définir le backlog à la valeur maximale autorisée par le système.
La cause réelle est soit un faible taux de traitement (par exemple, un serveur de blocage à thread unique) ou un nombre insuffisant de threads / processus de travail (par exemple, un logiciel de blocage multi-processus / thread comme apache
/ tomcat
)
PS. Parfois, il est préférable d'échouer rapidement et de laisser l'équilibreur de charge faire son travail (réessayer) plutôt que de faire patienter l'utilisateur - à cette fin, nous définissons net.core.somaxconn
n'importe quelle valeur et limitons le retard d'application par exemple à 10
et défini net.ipv4.tcp_abort_on_overflow
à 1.
PPS. Les anciennes versions du noyau Linux ont un bug désagréable de tronquer la somaxcon
valeur à ses 16 bits inférieurs (c'est-à-dire de convertir la valeur en uint16_t
), donc augmenter cette valeur à plus que ce qui 65535
peut même être dangereux. Pour plus d'informations, voir: http://patchwork.ozlabs.org/patch/255460/
Si vous souhaitez entrer dans plus de détails sur tous les composants internes du backlog sous Linux, n'hésitez pas à lire:
Comment fonctionne le backlog TCP sous Linux .