Diario del sistema operativo: use el comando curl para analizar la situación de la solicitud que consume mucho tiempo

Publicado de https://cizixs.com/2017/04/11/use-curl-to-analyze-request/

Encontré un problema en mi trabajo recientemente, y la respuesta a una determinada solicitud fue particularmente lenta, por lo que espero que haya una manera de analizar qué paso de la solicitud lleva más tiempo, a fin de encontrar la causa del problema. Después de buscar en Internet, encontré un método muy útil: el comando curl puede ayudarlo a analizar las partes de la solicitud que requieren mucho tiempo.

El comando curl proporciona el parámetro -w, que se explica en la página de manual de la siguiente manera:

 -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.

Puede imprimir cierta información de acuerdo con el formato especificado, que puede usar algunas variables específicas y admite caracteres de escape \ n, \ ty \ r. Se proporcionan muchas variables, como status_code, local_port, size_download, etc. En este artículo, solo nos enfocamos en las variables relacionadas con el tiempo de la solicitud (variables que comienzan con time_).

Primero escriba el siguiente contenido en el archivo de texto 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

Entonces, ¿qué significan estas variables? Dejame explicar:

time_namelookup: cuando se resuelve el nombre de dominio DNS, es el proceso de convertir https://zhihu.com en una dirección IP.
time_connect: la hora en la que se establece la conexión TCP, que es la hora del protocolo de enlace de tres vías
time_appconnect: la hora en la que se conecta el protocolo de capa superior, como SSL / SSH, por ejemplo connect / handshake time
time_redirect: el tiempo desde el inicio hasta la última transacción de solicitud
time_pretransfer: el tiempo desde el inicio de la solicitud hasta el inicio de la respuesta
time_starttransfer: el tiempo desde el inicio de la solicitud hasta el primer byte a ser transferido
time_total: todo el tiempo dedicado a esta solicitud Hora
Echemos un vistazo a una solicitud simple, sin redirección y sin tiempo de protocolo 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

Puede ver que se imprime el tiempo de cada paso de esta solicitud, y la unidad de cada número es segundos (segundos), de modo que puede analizar qué paso lleva más tiempo y facilitar la localización del problema. El significado de cada parámetro de este comando:

-w: lee el formato de la información a imprimir desde el archivo
-o / dev / null: descarta el contenido de la respuesta, porque aquí no nos importa, solo la situación de la solicitud que consume mucho tiempo
-s: no imprime la barra de progreso
de esta Salida, podemos calcular el tiempo de cada paso:

Consulta DNS: 12 ms
el tiempo de conexión TCP: pretransfter (227) - nameLookup ( 12) = 215ms
tiempo de procesamiento del servidor: starttransfter (443) - antes de la transferencia ( 227) = 216ms
contenido del tiempo de transmisión: total (867) - starttransfer ( 443) = 424ms
a Uno más complicado, visitar una determinada página de inicio, con redireccionamiento y protocolo SSL en el medio:

➜  ~ 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

Puede ver que time_appconnect y time_redirect ya no son 0, y el tiempo de procesamiento del protocolo SSL es 328-18 = 310ms. Y el tiempo de pretransfer y starttransfer se acorta, este es el tiempo de la solicitud después de la redirección.

Supongo que te gusta

Origin blog.csdn.net/qq_32198277/article/details/89207535
Recomendado
Clasificación