Come posso risolvere i problemi di latenza elevata del mio Application Load Balancer in Elastic Load Balancing?
Desidero risolvere i problemi di latenza elevata del mio Application Load Balancer in Elastic Load Balancing (ELB).
Breve descrizione
Le possibili cause di latenza elevata di un Application Load Balancer includono:
- Problemi di connettività o congestione della rete
- Utilizzo elevato della memoria (RAM) nelle istanze di backend
- Utilizzo elevato della CPU nelle istanze di backend
- Configurazioni errate del server web sulle istanze di backend
- Problemi con le dipendenze delle applicazioni web eseguite sulle istanze di backend
- Grande distanza fisica tra i client o le destinazioni locali e l'Application Load Balancer
Risoluzione
Per risolvere i problemi di latenza elevata di un Application Load Balancer, intraprendi le seguenti azioni:
-
Verifica la presenza di problemi di connettività di rete. Per ulteriori informazioni, consulta Risoluzione dei problemi degli Application Load Balancer.
-
Esegui questo comando per misurare la risposta del primo byte e verificare la presenza di una risoluzione DNS lenta che potrebbe causare latenza:
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/Esempio di output:
=============== | 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: per isolare la causa della latenza, completa il passaggio precedente con l'Application Load Balancer, quindi ripeti il passaggio bypassando l'Application Load Balancer. Per ulteriori informazioni, consulta la pagina curl man sul sito web curl.
-
Controlla la statistica Media della metrica di Amazon CloudWatch TargetResponseTime per l'Application Load Balancer. Se il valore è elevato, si è verificato un problema nelle istanze di backend o nei server di dipendenza dell'applicazione. Per ulteriori informazioni, consulta Come posso risolvere un aumento della metrica TargetResponseTime per un Application Load Balancer?
-
Per identificare le istanze di backend con latenza elevata, controlla le voci del log degli accessi dell'Application Load Balancer.
-
Per identificare le istanze di backend con problemi di latenza, controlla se il valore target_processing_time corrisponde a un tempo più lungo del normale.
-
Per verificare se sono presenti problemi dell'Application Load Balancer, esamina se i campi request_processing_time e response_processing_time indicano tempi più lunghi del normale.
Esempio di voce di log:
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: l'esempio di voce di log precedente mostra che request_processing_time è 0,001, target_processing_time è 12,401 e response_processing_time è 0,001. Il valore target_processing_time indica che il tempo è stato più lungo del normale e che la destinazione dell'Application Load Balancer ha causato latenza. Per ulteriori informazioni, consulta Sintassi.
-
Per identificare un utilizzo elevato o picchi di utilizzo della CPU, controlla la metrica di CloudWatch CPUUtilization per le istanze di backend. Per risolvere un utilizzo elevato della CPU, aggiorna l'istanza a un tipo di istanza più grande.
-
Per esaminare i processi Apache sul backend e verificare la presenza di problemi di memoria, esegui questo comando:
watch -n 1 "echo -n 'Apache Processes: ' && ps -C apache2 --no-headers | wc -l && free -m"Esempio di output:
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 -
Per verificare quante richieste simultanee può servire l'istanza, visualizza l'impostazione MaxClient per i server web sulle istanze di backend. Se l'istanza utilizza in maniera adeguata la memoria e la CPU, ma comunque presenta una latenza elevata, aumenta il valore MaxClient.
-
Confronta il numero di processi generati da Apache (httpd) con il valore MaxClient. Se il numero di processi Apache raggiunge spesso il valore MaxClient, aumenta il valore MaxClient.
Esempio di comando:
[root@ip-192.0.2.0 conf]# ps aux | grep httpd | wc -l 15Esempio di output:
<IfModule prefork.c>StartServers 10 MinSpareServers 5 MaxSpareServers 10 ServerLimit 15 MaxClients 15 MaxRequestsPerChild 4000 </IfModule>
Controlla le dipendenze del backend
Verifica le dipendenze sulle istanze di backend che potrebbero causare problemi di latenza. Le dipendenze includono, ad esempio, bucket Amazon Simple Storage Service (Amazon S3), istanze NAT (Network Address Translation) o server proxy e servizi web remoti.
Utilizza gli strumenti di Linux per identificare i colli di bottiglia delle prestazioni
Per identificare i colli di bottiglia delle prestazioni sul server, utilizza i seguenti comandi di Linux:
- Esegui il comando uptime per verificare la presenza di medie elevate di carico del sistema dovute a un conflitto di risorse. L'output mostra le medie di carico del sistema che rappresentano il numero di attività in attesa di esecuzione o bloccate su un'operazione di I/O.
- Il comando mpstat -P ALL 1 mostra una ripartizione dell'utilizzo della CPU per ciascun core. Esegui il comando per determinare un utilizzo non bilanciato, ad esempio un singolo core che gestisce la maggior parte del lavoro in un'applicazione a thread singolo.
- Per identificare processi e modelli che richiedono molte risorse nel tempo, esegui il comando pidstat 1. L'output mostra l'utilizzo della CPU in tempo reale per processo.
- Esegui il comando dmesg | tail per identificare gli eventi recenti a livello di sistema che potrebbero influire sulle prestazioni. L'output mostra gli ultimi 10 messaggi del sistema.
- Per identificare operazioni di lettura o scrittura elevate o prestazioni lente del disco, esegui il comando iostat -xz 1. L'output mostra l'utilizzo le metriche di I/O del disco.
- Esegui il comando free -m per visualizzare la memoria di sistema disponibile. Se la memoria disponibile è scarsa, il sistema potrebbe fare affidamento su uno swap che aumenta l'I/O e la latenza del disco.
- Per identificare la saturazione della larghezza di banda, esegui il comando sar -n DEV 1 tool. L'output mostra il throughput dell'interfaccia di rete che include il traffico ricevuto (rxkB/s)) e trasmesso (txkB/s).
- Esegui sar -n TCP,ETCP 1 per visualizzare le seguenti metriche TCP principali che ti aiutano a determinare i problemi di connessione:
La metrica active/s è il numero di connessioni TCP avviate localmente al secondo.
La metrica passive/s è il numero di connessioni TCP avviate in remoto al secondo.
La metrica retrans/s è il numero di ritrasmissioni TCP al secondo. Quando questa metrica è elevata, è possibile che si verifichi una perdita o una congestione di pacchetti. - Per identificare cosa sta utilizzando la maggior larghezza di banda sulla rete, esegui il comando iftop. L'output mostra l'utilizzo attivo della larghezza di banda per ciascuna connessione in tempo reale.
- Il comando niftop è una variante del comando iftop che potrebbe essere disponibile tramite repository di terze parti su Red Hat Enterprise Linux (RHEL) e distribuzioni basate su Debian. Se iftop non è preinstallato sul sistema, utilizza niftop.
Nota: a seconda della distribuzione di Linux in uso, potresti dover installare manualmente alcuni dei comandi precedenti.
- Argomenti
- Networking & Content Delivery
- Lingua
- Italiano
