Experimento una latencia alta cuando me conecto a un equilibrador de carga clásico de Elastic Load Balancing (ELB).
Descripción breve
La alta latencia en un equilibrador de carga clásico se produce por los siguientes motivos:
- Problemas de conectividad de red
- Configuración incorrecta del equilibrador de carga clásico
- Uso elevado de memoria (RAM) en instancias de backend
- Uso elevado de CPU en instancias de backend
- Configuración incorrecta del servidor web en las instancias de backend
- Problemas con las dependencias de las aplicaciones web que se ejecutan en instancias de backend, como bases de datos externas o buckets de Amazon Simple Storage Service (Amazon S3)
Resolución
1. Solucione los problemas de conectividad de red de su equilibrador de carga clásico.
2. Configure el equilibrador de carga clásico para su caso de uso.
3. Consulte los registros de acceso de su equilibrador de carga clásico para determinar qué instancias de backend experimentan una latencia alta. Revise backend_processing_time para encontrar instancias de backend con problemas de latencia.
Para comprobar que el servidor de aplicaciones web de una instancia de backend experimenta una latencia alta, use curl para medir la respuesta del primer byte:
[ec2-user@ip-192.0.2.0 ~]$ for X in `seq 6`; do curl -Ik -w "HTTPCode=%{http_code} TotalTime=%{time_total}\n" http://www.example.com/ -so /dev/null; done
High Latency sample output:
HTTPCode=200 TotalTime=2.452
HTTPCode=200 TotalTime=1.035
Low latency sample output:
HTTPCode=200 TotalTime=0.515
HTTPCode=200 TotalTime=0.013
4. Consulte la estadística Average de la métrica de latencia de Amazon CloudWatch para su equilibrador de carga clásico. Si el valor es alto, hay un problema con las instancias de backend o los servidores de dependencias de aplicaciones.
5. Compruebe la estadística Maximum de la métrica de latencia. Si el valor alcanza o supera el valor de tiempo de espera de inactividad, las solicitudes se agotan y provocan los errores HTTP 504.
6. Compruebe si hay patrones en la métrica Latencia. Los picos de métricas a intervalos regulares indican problemas de rendimiento con las instancias de backend debido a la sobrecarga de las tareas programadas.
7. Consulte la métrica SurgeQueueLength de CloudWatch para ELB. Si las solicitudes al equilibrador de carga clásico superan el valor máximo (1024), estas se rechazan y el equilibrador de carga genera un error HTTP 503. La estadística de suma de la métrica SpilloverCount mide el número total de solicitudes rechazadas. Para obtener más información, consulte ¿Cómo puedo solucionar los problemas de capacidad del equilibrador de carga clásico en ELB?
8. Revise el Apache que se procesa en sus instancias de backend para comprobar si hay problemas de memoria.
Ejemplo de comando:
watch -n 1 "echo -n 'Apache Processes: ' && ps -C apache2 --no-headers | wc -l && free -m"
Ejemplo de salida:
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
9. Compruebe la métrica de CPUUtilization de CloudWatch de sus instancias de backend. Busque un uso elevado de la CPU o picos en el uso de la misma. Para un uso elevado de la CPU, actualice sus instancias a un tipo de instancia más grande.
10. Compruebe la configuración de MaxClient para los servidores web de sus instancias de backend. Esta configuración define el número de solicitudes simultáneas que puede atender la instancia. Para instancias con un uso adecuado de memoria y CPU que experimenten una latencia alta, aumente el valor MaxClient.
Compare la cantidad de procesos que Apache (httpd) genera con la configuración MaxClient. Si el número de procesos de Apache alcanza con frecuencia el valor de MaxClient, aumente el valor.
Ejemplo de comando:
[root@ip-192.0.2.0 conf]# ps aux | grep httpd | wc -l 15
Ejemplo de salida:
<IfModule prefork.c>
StartServers 10
MinSpareServers 5
MaxSpareServers 10
ServerLimit 15
MaxClients 15
MaxRequestsPerChild 4000
</IfModule>
11. Compruebe si hay dependencias que causen problemas de latencia en sus instancias de backend.
Estas son algunas de las dependencias que pueden causar problemas de latencia:
- Bases de datos compartidas, recursos externos, como buckets de S3
- Conexiones de recursos externos, como instancias de traducción de direcciones de red (NAT)
- Servicios web remotos
- Servidores proxy
Información relacionada
Monitor your Classic Load Balancer