¿Cómo puedo solucionar los problemas de latencia alta en mi equilibrador de carga de aplicación en Elastic Load Balancing?
Quiero solucionar los problemas de latencia alta en mi equilibrador de carga de aplicación en Elastic Load Balancing (ELB).
Descripción corta
A continuación se indican las causas de la latencia alta en un equilibrador de carga de aplicación:
- Problemas de congestión o conectividad de red
- Uso elevado de memoria (RAM) en instancias de backend
- Uso elevado de CPU en instancias de backend
- Configuraciones incorrectas del servidor web en las instancias de backend
- Problemas con las dependencias de las aplicaciones web que se ejecutan en instancias de backend
- Gran distancia geográfica entre los clientes o los objetivos locales y el equilibrador de carga de aplicación
Resolución
Para solucionar problemas de alta latencia en tu equilibrador de carga de aplicación, toma las siguientes medidas:
-
Comprueba si hay problemas de conectividad de red. Para obtener más información, consulta Solución de problemas con los equilibradores de carga de aplicación.
-
Mide la respuesta del primer byte y comprueba si la resolución de DNS es lenta y puede provocar latencia:
curl -kso /dev/null -w "\n===============\n | DNS lookup: %{time_namelookup}\n | Connect: %{time_connect}\n | App connect: %{time_appconnect}\n | Pre-transfer: %{time_pretransfer}\n | Start transfer: %{time_starttransfer}\n | Total: %{time_total}\n | HTTP Code: %{http_code}\n===============\n" https://example.com/Resultado de ejemplo:
=============== | DNS lookup: 0.002346 | Connect: 0.003080 | App connect: 0.008422 | Pre-transfer: 0.008587 | Start transfer: 0.050238 | Total: 0.057486 | HTTP Code: 200 ===============Nota: Para aislar la causa de la latencia, completa el paso anterior con el equilibrador de carga de aplicación y, a continuación, vuelve a completar el paso y omite el equilibrador de carga de aplicación. Para obtener más información, consulta la página del manual de curl en el sitio web de curl.
-
Consulta la estadística Promedio de la métrica TargetResponseTime de Amazon CloudWatch para tu equilibrador de carga de aplicación. Si el valor es alto, significa que tienes un problema en las instancias de backend o en los servidores de dependencia de las aplicaciones. Para obtener más información, consulta ¿Cómo soluciono un aumento en la métrica TargetResponseTime para un equilibrador de carga de aplicación?
-
Para identificar las instancias de backend que tienen una latencia alta, consulta las entradas del registro de acceso de tu equilibrador de carga de aplicación.
-
Para identificar las instancias de backend con problemas de latencia, comprueba target_processing_time para ver si hay un periodo de tiempo más largo de lo normal.
-
Para confirmar los problemas con el equilibrador de carga de aplicación, revisa los campos request_processing_time y response_processing_time para ver si hay periodos de tiempo más largos de lo normal.
Ejemplo de entrada de registro:
http 2024-04-01T22:23:00.765170Z app/example-loadbalancer/50dc6c495c0c9188 192.168.131.39:2817 10.0.0.1:80 0.001 12.401 0.001 200 200 34 366 "GET http://www.example.com:80/ HTTP/1.1" "curl/7.46.0" - - arn:aws:elasticloadbalancing:us-east-2:123456789012:targetgroup/example-targets/73e2d6bc24d8a067 "Root=1-58337262-36d228ad5d99923122bbe354" "-" "-" 0 2024-04-01T22:22:48.364000Z "forward" "-" "-" "10.0.0.1:80" "200" "-" "-"Nota: La entrada de registro del ejemplo anterior muestra que request_processing_time es 0.001, target_processing_time es 12.401 y response_processing_time es 0.001. El valor target_processing_time muestra un periodo de tiempo más largo de lo normal y que el objetivo del equilibrador de carga de aplicación provocó latencia. Para obtener más información, consulta Sintaxis.
-
Para identificar el uso elevado de la CPU o los picos en el uso de la CPU, consulta la métrica CPUUtilization de CloudWatch de tus instancias de backend. Para resolver el uso elevado de la CPU, actualiza tu instancia a un tipo de instancia más grande.
-
Para revisar los procesos de Apache en tu backend y comprobar si hay problemas de memoria, ejecuta el siguiente comando:
watch -n 1 "echo -n 'Apache Processes: ' && ps -C apache2 --no-headers | wc -l && free -m"Resultado de ejemplo:
Every 1.0s: echo -;n 'Apache Processes: ' && ps -;C apache2 -;no-headers | wc -1 && free -;m Apache Processes: 27 total used free shared buffers cached Mem: 8204 7445 758 0 385 4567 -/+ buffers/cache: 2402 5801 Swap: 16383 189 16194 -
Para comprobar cuántas solicitudes simultáneas puede atender la instancia, consulta la opción de configuración MaxClient para los servidores web de las instancias de backend. Si la instancia utiliza la cantidad adecuada de memoria y CPU y sigue experimentando una latencia alta, aumenta el valor de MaxClient.
-
Compara la cantidad de procesos que Apache (httpd) genera con el valor de MaxClient. Si el número de procesos de Apache alcanza con frecuencia el valor de MaxClient, aumenta el valor de MaxClient.
Ejemplo de comando:
[root@ip-192.0.2.0 conf]# ps aux | grep httpd | wc -l 15Resultado de ejemplo:
<IfModule prefork.c>StartServers 10 MinSpareServers 5 MaxSpareServers 10 ServerLimit 15 MaxClients 15 MaxRequestsPerChild 4000 </IfModule>
Comprobar las dependencias del back-end
Comprueba si hay dependencias en las instancias de backend que causen problemas de latencia. Entre los ejemplos de dependencias se incluyen los buckets de Amazon Simple Storage Service (Amazon S3), las instancias de traducción de direcciones de red (NAT) o los servidores proxy y los servicios web remotos.
Uso de las herramientas de Linux para identificar los cuellos de botella de rendimiento
Para identificar los cuellos de botella de rendimiento del servidor, utiliza los siguientes comandos de Linux:
- Ejecuta el comando uptime para comprobar si los promedios de carga del sistema son altos debido a la escasez de recursos. El resultado muestra los promedios de carga del sistema, es decir, el número de tareas que están esperando para ejecutarse o que están bloqueadas en la E/S.
- El comando mpstat -P ALL 1 muestra un desglose del uso de la CPU para cada núcleo. Ejecuta el comando para determinar el uso desequilibrado, como un único núcleo que se encarga de la mayor parte del trabajo en una aplicación de un solo subproceso.
- Para identificar los procesos y patrones que consumen muchos recursos a lo largo del tiempo, ejecuta el comando pidstat 1. El resultado muestra el uso de la CPU en tiempo real por proceso.
- Ejecuta el comando dmesg | tail para identificar los eventos recientes a nivel del sistema que puedan afectar al rendimiento. El resultado muestra los últimos 10 mensajes del sistema.
- Para identificar operaciones de lectura o escritura elevadas o un rendimiento lento del disco, ejecuta el comando iostat -xz 1. El resultado muestra las métricas y el uso de E/S del disco.
- Ejecuta el comando free -m para ver la memoria disponible del sistema. Si la memoria disponible es baja, es posible que el sistema dependa de un intercambio que aumente la E/S y la latencia del disco.
- Para identificar la saturación del ancho de banda, ejecuta el comando de herramienta sar -n DEV 1. El resultado muestra el rendimiento de la interfaz de red que incluye el tráfico recibido (rxkB/s) y transmitido (txkB/s).
- Ejecuta sar -n TCP,ETCP 1 para ver las siguientes métricas TCP clave que te ayudarán a determinar los problemas de conexión:
La métrica active/s es el número de conexiones TCP iniciadas localmente por segundo.
La métrica passive/s es la cantidad de conexiones TCP iniciadas de forma remota por segundo.
La métrica retrans/s es el número de retransmisiones TCP por segundo. Cuando esta métrica es alta, es posible que experimentes pérdida de paquetes o congestión. - Para identificar qué es lo que consume más ancho de banda en la red, ejecuta el comando iftop. El resultado muestra el uso activo del ancho de banda para cada conexión en tiempo real.
- El comando niftop es una variante de iftop que puede estar disponible en repositorios de terceros en distribuciones basadas en Red Hat Enterprise Linux (RHEL) y Debian. Si iftop no está preinstalado en tu sistema, utiliza niftop.
Nota: En función de tu distribución de Linux, es posible que necesites instalar manualmente algunos de los comandos anteriores.
- Etiquetas
- Elastic Load Balancing
- Idioma
- Español

Contenido relevante
- preguntada hace 6 meses
- preguntada hace 6 meses
- preguntada hace un año