31.8. Optimisation des applications avec un grand nombre de requêtes entrantes
Si vous exécutez une application qui traite un grand nombre de requêtes entrantes, comme les serveurs web, il peut être nécessaire de régler Red Hat Enterprise Linux afin d'optimiser les performances.
31.8.1. Ajustement du backlog d'écoute TCP pour traiter un nombre élevé de tentatives de connexion TCP
Lorsqu'une application ouvre un socket TCP dans l'état LISTEN
, le noyau limite le nombre de connexions client acceptées que ce socket peut gérer. Si les clients essaient d'établir plus de connexions que l'application ne peut en traiter, les nouvelles connexions sont perdues ou le noyau envoie des cookies SYN au client.
Si le système est soumis à une charge de travail normale et qu'un trop grand nombre de connexions de clients légitimes amène le noyau à envoyer des cookies SYN, réglez Red Hat Enterprise Linux (RHEL) pour les éviter.
Conditions préalables
-
RHEL enregistre
possible SYN flooding on port <ip_address>:<port_number>
les messages d'erreur dans le journal Systemd. - Le nombre élevé de tentatives de connexion provient de sources valables et n'est pas dû à une attaque.
Procédure
Pour vérifier si un réglage est nécessaire, affichez les statistiques du port concerné :
# ss -ntl '( sport = :443 )' State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 650 500 192.0.2.1:443 0.0.0.0:*
Si le nombre actuel de connexions dans l'arriéré (
Recv-Q
) est supérieur à l'arriéré de sockets (Send-Q
), l'arriéré d'écoute n'est pas encore assez important et un réglage est nécessaire.Facultatif : Affiche la limite actuelle de l'arriéré d'écoute TCP :
# sysctl net.core.somaxconn net.core.somaxconn = 4096
Créez le fichier
/etc/sysctl.d/10-socket-backlog-limit.conf
et fixez une limite d'écoute plus élevée :net.core.somaxconn = 8192
Il est à noter que les applications peuvent demander une réserve d'écoute plus importante que celle spécifiée dans le paramètre du noyau
net.core.somaxconn
, mais le noyau limite l'application au nombre que vous avez défini dans ce paramètre.Charger le réglage à partir du fichier
/etc/sysctl.d/10-socket-backlog-limit.conf
:# sysctl -p /etc/sysctl.d/10-socket-backlog-limit.conf
Reconfigurer l'application pour utiliser la nouvelle limite d'écoute :
-
Si l'application fournit une option de configuration pour la limite, mettez-la à jour. Par exemple, le serveur HTTP Apache fournit l'option de configuration
ListenBacklog
pour définir la limite de l'arriéré d'écoute pour ce service. - Si vous ne pouvez pas configurer la limite, recompilez l'application.
-
Si l'application fournit une option de configuration pour la limite, mettez-la à jour. Par exemple, le serveur HTTP Apache fournit l'option de configuration
- Restart the application.
Vérification
-
Surveillez le journal Systemd pour détecter d'autres messages d'erreur
possible SYN flooding on port <port_number>
messages d'erreur. Surveillez le nombre actuel de connexions dans l'arriéré et comparez-le à l'arriéré de prises :
# ss -ntl '( sport = :443 )' State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 500 192.0.2.1:443 0.0.0.0:*
Si le nombre actuel de connexions dans l'arriéré (
Recv-Q
) est supérieur à l'arriéré de sockets (Send-Q
), l'arriéré d'écoute n'est pas assez important et un réglage supplémentaire est nécessaire.
Ressources supplémentaires
- kernel : Inondation SYN possible sur le port #. Envoi d'une solution de cookies
- Le serveur TCP à l'écoute ignore la solution SYN ou ACK pour une nouvelle connexion
-
listen(2)
page de manuel