Rendimiento Pix
Pix DinamoEste documento sirve para diagnosticar problemas de rendimiento utilizando las API de comunicación HTTP del módulo de .
Información
Este diagrama de flujo está orientado a resolver problemas de rendimiento. Para obtener directrices de arquitectura, consulte el tema Pix.
El diagnóstico básico inicial puede realizarse utilizando el diagrama de flujo que figura a continuación.
---
title: Fluxo para diagnóstico
---
%%{ init: { 'flowchart': { 'curve': 'basis' } } }%%
flowchart TD
inicio((Lentidão nas<br>requisições<br>Pix HTTP))
high_qty_session_?{A<br>quantidade<br>de sessões<br>abertas com o HSM<br>é maior que o<br>esperado ?}
check_app_is_closing[Verificar se a aplicação<br>está fazendo o fechamento<br>das sessões após o seu<br>uso, inclusive nos casos<br>de erro]
check_bacen_comm[Verificar se as chamadas<br>ao bacen estão<br>recebendo falhas. Em<br>caso de falha o Bacen<br>pode fazer um delay antes<br>de retornar um erro. Casos<br> de erro comuns: exceder o<br>limite de conexões e fila vazia.]
qty_session_still_high_?{O número<br>de sessões<br>com o HSM<br>continua<br>alto ?}
sessions_still_slow_?{A conexão<br>continua<br>lenta ?}
check_network[Verificar se há<br>lenditão ou<br>instabilidade<br>conhecida na rede]
network_still_slow_?{A conexão<br>continua<br>lenta ?}
check_bacen[Verificar se há<br>lentidão com<br>o Bacen. Entrar<br>em contato ou<br>verificar se há<br>comunicados.]
bacen_still_slow_?{A conexão<br>continua<br>lenta ?}
check_Logs[Analisar logs do<br>client do HSM em<br>depuração. Ver<br>troubleshoot<br>específico.]
logs_still_slow_?{A conexão<br>continua<br>lenta ?}
suporte((Acionar<br>o suporte<br>do HSM))
resolvido((Resolvido))
inicio --> high_qty_session_?
high_qty_session_? -->|Sim| check_app_is_closing
high_qty_session_? -->|Não| check_bacen_comm
check_app_is_closing --> qty_session_still_high_?
qty_session_still_high_? -->|Sim| suporte
qty_session_still_high_? -->|Não| resolvido
check_bacen_comm --> sessions_still_slow_?
sessions_still_slow_? -->|Não| resolvido
sessions_still_slow_? -->|Sim| check_network
check_network --> network_still_slow_?
network_still_slow_? -->|Não| resolvido
network_still_slow_? -->|Sim| check_bacen
check_bacen --> bacen_still_slow_?
bacen_still_slow_? -->|Não| resolvido
bacen_still_slow_? -->|Sim| check_Logs
check_Logs --> logs_still_slow_?
logs_still_slow_? -->|Não| resolvido
logs_still_slow_? ---->|Sim| suporte
Registros de clientes
1. Generar los registros del cliente HSM al depurar
Habilitar los registros de la biblioteca cliente HSM en depuración y con la descarga activada.
-
Establezca la siguiente variable de entorno con la carpeta de destino. Recuerde establecer una carpeta de destino sin el nombre de archivo. Para más detalles sobre cómo activar los registros, consulte el tema Registros.
HSM_LOG_DIR=/pasta_de_destino/
-
Reinicie la aplicación y vuelva a realizar la prueba.
-
En la carpeta de destino de los registros, abra el archivo de registro generado. Debe llamarse tacndlib_xxxx.log, donde xxxx será el PID (Process ID) de la aplicación.
2. Identificar las operaciones problemáticas
-
Identifique las operaciones consideradas lentas. Pix Puede ver el tiempo total de la operaciónHTTP en el elemento total_time_ms de la línea de registro LogDebugRequestInfo.
2021/02/03 19:06:21 144E0000 0000008C 408e0e2f debug LogDebugRequestInfo fpos="m" name_lookup_time_ms=0.000047 connect_time_ms=0.000227 appconnect_time_ms=5.000350 pretransfer_time_ms=5.000403 starttransfer_time_ms=5.000554 total_time_ms=6.000215 redirect_time_ms=0.000000
3. Analizar los datos encontrados
Con los registros de las operaciones problemáticas identificadas, es posible ver los puntos de la operación en los que se empleó más tiempo.
Los registros de tiempo de operación tienen contadores en milisegundos que marcan el tiempo entre el inicio de la operación y el momento del marcador. Por ejemplo: connect_time_ms es el tiempo transcurrido desde el inicio de la operación hasta el final de la conexión con el servidor remoto. appconnect_time_ms es el tiempo transcurrido desde el inicio de la operación hasta el final del handshake TLS. Para averiguar el tiempo empleado por appconnect_time_ms, basta con restar el tiempo empleado por connect_time_ms del tiempo empleado por appconnect_time_ms. Así: TLS handshake time = appconnect_time_ms - connect_time_ms.
Algunos de los puntos más comunes que hay que comprobar.
- El buen tiempo en appconnect_time_ms
- Cuando la sesión se abre por primera vez, puede que veas un tiempo más largo en appconnect_time_ms. Esto se debe a que en ese momento se produce el handshake TLS y se utiliza la clave en el HSM, lo que provoca un tiempo mayor. En operaciones posteriores con la misma sesión, este tiempo debería ser bajo, porque el túnel ya se ha establecido y se reutilizará a partir de ahora.
- Si este tiempo es extremadamente alto, compruebe la calidad de la conexión con el HSM.
- Este es el único punto de la operación en el que hay comunicación con el HSM.
- Si las siguientes operaciones continúan durante más tiempo, compruebe que los parámetros de sesión están activados correctamente; para más detalles, consulte el tema Sesiones.
- Si el tiempo sigue siendo elevado, compruebe que no se está reutilizando la sesión. La reutilización de la sesión es un factor de rendimiento importante.
- El buen tiempo en hora_inicio_transferencia
- Este contador marca el tiempo transcurrido desde el inicio de la operación hasta que se recibe el primer byte. Puede indicar lentitud en la comunicación con el servidor remoto.
- Algunas causas posibles son la lentitud de la red, la lentitud de procesamiento del servidor remoto, etc.
- En caso de error, el BACEN puede esperar un tiempo antes de enviar una respuesta. Suelen ser tiempos bien definidos. Es posible ver casos de 5 segundos de espera en este punto.
Se pueden comprobar otros puntos para depurar las conexiones. En la tabla siguiente se describe el resto de información disponible en los registros.
Dado | Descripción |
---|---|
nombre_buscar_tiempo_ms |
Tiempo transcurrido entre el inicio de la solicitud y el final de la resolución del nombre. Tiempo en milisegundos. |
conectar_tiempo_ms |
Tiempo transcurrido entre el inicio de la solicitud y el final de la conexión con el host remoto (o proxy). Si hay redirección, se añade el tiempo. Tiempo en milisegundos. |
appconnect_time_ms |
Tiempo transcurrido entre el inicio de la solicitud y el final del handshake SSL/SSH con el host remoto. Tiempo en milisegundos. |
pretransfer_time_ms |
Tiempo transcurrido entre el inicio de la solicitud y el momento justo antes de que se envíen los datos. Si hay redirección, se añade el tiempo. Tiempo en milisegundos. |
tiempo_inicio_transferencia_ms |
Tiempo transcurrido entre el inicio de la petición hasta que se recibe el primer byte. Si hay redirección, se añade el tiempo. Tiempo en milisegundos. |
tiempo_total_ms |
Tiempo total de la solicitud. Si hay redirección, se añade el tiempo. Tiempo en milisegundos. |
redirect_time_ms |
Tiempo total que tardan las redirecciones. Tiempo en milisegundos. |
longitud_contenido_cargar |
Longitud del contenido al cargar datos. Se obtiene del campo Content-Length. Obtiene -1 si no se conoce la longitud. Tamaño en bytes. |
contenido_longitud_descarga |
Tamaño del contenido-longitud al descargar los datos. Se obtiene del campo Content-Length. Obtiene -1 si no se conoce la longitud. Tamaño en bytes. |
velocidad_subida |
Velocidad media de la subida completa. Velocidad en bytes/segundo. |
velocidad_descarga |
Velocidad media de la descarga completa. Velocidad en bytes/segundo. |
tamaño_descarga |
Tamaño total de la carga útil de la descarga (cuerpo). Los metadatos y las cabeceras no se incluyen en este recuento. Tamaño en bytes. |
tamaño_carga |
Tamaño total de la carga útil (cuerpo). Tamaño en bytes. |
redirect_count |
Recuento de redireccionamientos realizados. |
número_conexiones |
Recuento de conexiones creadas para completar la transferencia anterior. |
tamaño_petición |
Tamaño total de la petición enviada. Tamaño en bytes. |
tamaño_cabecera_recibida |
Tamaño total de todas las cabeceras recibidas. Tamaño en bytes. |
código_de_respuesta_http |
Código de respuesta HTTP para la solicitud. Será cero si no se recibe ningún código de respuesta. |