Journal du système d'exploitation - utilisez la commande curl pour analyser la situation chronophage de la demande

Republié à partir de https://cizixs.com/2017/04/11/use-curl-to-analyze-request/

J'ai récemment rencontré un problème dans mon travail et la réponse à une certaine demande a été très lente, j'espère donc qu'il existe un moyen d'analyser quelle étape de la demande prend le plus de temps, afin de trouver davantage la cause du problème. Après une recherche sur Internet, j'ai trouvé une méthode très utile. La commande curl peut vous aider à analyser les parties chronophages de la requête.

La commande curl fournit le paramètre -w, qui est expliqué dans la page de manuel comme suit:

 -w, --write-out <format>
              Make curl display information on stdout after a completed transfer. The format is a string that may contain plain text mixed with any number of variables. The  format
              can  be  specified  as  a literal "string", or you can have curl read the format from a file with "@filename" and to tell curl to read the format from stdin you write
              "@-".

              The variables present in the output format will be substituted by the value or text that curl thinks fit, as described below. All variables are specified  as  %{vari‐
              able_name} and to output a normal % you just write them as %%. You can output a newline by using \n, a carriage return with \r and a tab space with \t.

Il peut imprimer certaines informations selon le format spécifié, qui peut utiliser certaines variables spécifiques, et prend en charge les caractères d'échappement \ n, \ t et \ r. De nombreuses variables sont fournies, telles que status_code, local_port, size_download, etc. Dans cet article, nous nous concentrons uniquement sur les variables liées à l'heure de la requête (variables commençant par time_).

Écrivez d'abord le contenu suivant dans le fichier texte curl-format.txt:

➜  ~ cat curl-format.txt
    time_namelookup:  %{time_namelookup}\n
       time_connect:  %{time_connect}\n
    time_appconnect:  %{time_appconnect}\n
      time_redirect:  %{time_redirect}\n
   time_pretransfer:  %{time_pretransfer}\n
 time_starttransfer:  %{time_starttransfer}\n
                    ----------\n
         time_total:  %{time_total}\n

Alors, que signifient ces variables? Laisse-moi expliquer:

time_namelookup: Lorsque le nom de domaine DNS est résolu, c'est le processus de conversion de https://zhihu.com en une adresse IP.
time_connect: l'heure à laquelle la connexion TCP est établie, qui est l'heure de la prise de
contact à trois voies time_appconnect: l'heure à laquelle le protocole de couche supérieure tel que SSL / SSH est connecté, par exemple Temps de connexion / prise de contact
time_redirect: le temps du début à la dernière demande de transaction
time_pretransfer: le temps du début de la demande au début de la réponse
time_starttransfer: le temps entre le début de la demande et le premier octet à transférer
time_total: tout le temps passé sur cette demande Time
Jetons un œil à une simple requête, pas de redirection et pas d'heure de protocole SSL:

➜  ~ curl -w "@curl-format.txt" -o /dev/null -s -L "http://cizixs.com"
    time_namelookup:  0.012
       time_connect:  0.227
    time_appconnect:  0.000
      time_redirect:  0.000
   time_pretransfer:  0.227
 time_starttransfer:  0.443
                    ----------
         time_total:  0.867

Vous pouvez voir que l'heure de chaque étape de cette demande est imprimée et que l'unité de chaque nombre est en secondes (secondes), afin que vous puissiez analyser quelle étape prend le plus de temps et faciliter la localisation du problème. La signification de chaque paramètre de cette commande:

-w: lire à partir du format de fichier des informations à imprimer
-o / dev / null: le contenu de la réponse est ignoré, car ici on s'en fiche, on se soucie uniquement de la situation chronophage demandée
-s: ne pas imprimer la barre
de progression à partir de ce Sortie, nous pouvons calculer le temps de chaque étape:

Requête DNS: 12ms
le temps de connexion TCP: pretransfter (227) - NAMELookup ( 12) = 215ms
temps de traitement du serveur: starttransfter (443) - pré - transfert ( 227) = 216ms
temps de transmission de contenu: total (867) - starttransfer ( 443) = 424ms
à Un plus compliqué, en visitant une certaine page d'accueil, avec la redirection et le protocole SSL au milieu:

➜  ~ curl -w "@curl-format.txt" -o /dev/null -s -L "https://baidu.com"
    time_namelookup:  0.012
       time_connect:  0.018
    time_appconnect:  0.328
      time_redirect:  0.356
   time_pretransfer:  0.018
 time_starttransfer:  0.027
                    ----------
         time_total:  0.384

Vous pouvez voir que time_appconnect et time_redirect ne valent pas 0 et que le temps de traitement du protocole SSL est de 328-18 = 310 ms. Et le temps de prétransfert et de démarrage de transfert est raccourci, c'est le temps de la demande après redirection.

Je suppose que tu aimes

Origine blog.csdn.net/qq_32198277/article/details/89207535
conseillé
Classement