Rechercher

31.7. Identifier les goulots d'étranglement de la mémoire tampon de la socket de lecture de l'application

download PDF

Si les applications TCP n'effacent pas les tampons de lecture de la socket assez fréquemment, la performance peut en souffrir et des paquets peuvent être perdus. Red Hat Enterprise Linux fournit différents utilitaires pour identifier de tels problèmes.

31.7.1. Identification de l'effondrement et de l'élagage de la mémoire tampon de réception

Lorsque les données de la file d'attente de réception dépassent la taille du tampon de réception, la pile TCP tente de libérer de l'espace en supprimant les métadonnées inutiles du tampon de la socket. Cette étape est connue sous le nom de "collapsing".

Si l'effondrement ne parvient pas à libérer suffisamment d'espace pour le trafic supplémentaire, le noyau élague les nouvelles données qui arrivent. Cela signifie que le noyau supprime les données de la mémoire et que le paquet est perdu.

Pour éviter les opérations de réduction et d'élagage, surveillez si la réduction et l'élagage des tampons TCP se produisent sur votre serveur et, dans ce cas, réglez les tampons TCP.

Procédure

  1. Utilisez l'utilitaire nstat pour interroger les compteurs TcpExtTCPRcvCollapsed et TcpExtRcvPruned:

    # nstat -az TcpExtTCPRcvCollapsed TcpExtRcvPruned
    #kernel
    TcpExtRcvPruned            0         0.0
    TcpExtTCPRcvCollapsed      612859    0.0
  2. Attendez un peu et exécutez à nouveau la commande nstat:

    # nstat -az TcpExtTCPRcvCollapsed TcpExtRcvPruned
    #kernel
    TcpExtRcvPruned            0         0.0
    TcpExtTCPRcvCollapsed      620358    0.0
  3. Si les valeurs des compteurs ont augmenté par rapport à la première exécution, un réglage est nécessaire :

    • Si l'application utilise l'appel setsockopt(SO_RCVBUF), envisagez de le supprimer. Avec cet appel, l'application n'utilise que la taille du tampon de réception spécifiée dans l'appel et désactive la capacité de la socket à ajuster automatiquement sa taille.
    • Si l'application n'utilise pas l'appel setsockopt(SO_RCVBUF), réglez les valeurs par défaut et maximale de la mémoire tampon de la socket TCP read.
  4. Affichez la file d'attente des commandes en attente de réception (Recv-Q) :

    # ss -nti
    State   Recv-Q   Send-Q   Local Address:Port   Peer Address:Port   Process
    ESTAB   0        0        192.0.2.1:443        192.0.2.125:41574
          :7,7 ... lastrcv:543 ...
    ESTAB   78       0        192.0.2.1:443        192.0.2.56:42612
          :7,7 ... lastrcv:658 ...
    ESTAB   88       0        192.0.2.1:443        192.0.2.97:40313
          :7,7 ... lastrcv:5764 ...
    ...
  5. Exécutez la commande ss -nt plusieurs fois en attendant quelques secondes entre chaque exécution.

    Si la sortie ne mentionne qu'un seul cas de valeur élevée dans la colonne Recv-Q, l'application se trouvait entre deux opérations de réception. Toutefois, si les valeurs de Recv-Q restent constantes alors que lastrcv augmente continuellement ou que Recv-Q augmente continuellement au fil du temps, l'un des problèmes suivants peut en être la cause :

    • L'application ne vérifie pas ses tampons de socket assez souvent. Contactez le fournisseur de l'application pour savoir comment résoudre ce problème.
    • L'application n'a pas assez de temps d'utilisation du processeur. Pour déboguer davantage ce problème :

      1. Affichage des cœurs de l'unité centrale sur lesquels l'application s'exécute :

        # ps -eo pid,tid,psr,pcpu,stat,wchan:20,comm
            PID     TID PSR %CPU STAT WCHAN                COMMAND
        ...
          44594   44594   5  0.0 Ss   do_select            httpd
          44595   44595   3  0.0 S    skb_wait_for_more_pa httpd
          44596   44596   5  0.0 Sl   pipe_read            httpd
          44597   44597   5  0.0 Sl   pipe_read            httpd
          44602   44602   5  0.0 Sl   pipe_read            httpd
        ...

        La colonne PSR affiche les cœurs de l'unité centrale auxquels le processus est actuellement affecté.

      2. Identifier les autres processus s'exécutant sur les mêmes cœurs et envisager de les affecter à d'autres cœurs.
Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.