Come posso risolvere i problemi di latenza elevata sul mio Application Load Balancer?

6 minuti di lettura
0

Riscontro latenza e timeout elevati quando provo ad accedere alle applicazioni Web in esecuzione su obiettivi registrati in un Application Load Balancer. Come posso risolvere questi problemi?

Breve descrizione

Le possibili cause di latenza elevata su un Application Load Balancer includono:

  • Problemi di connettività di rete
  • Elevato utilizzo della memoria (RAM) sulle istanze di backend
  • Elevato utilizzo della CPU sulle istanze di backend
  • Configurazione errata del server Web sulle istanze di backend
  • Problemi con le dipendenze delle applicazioni Web in esecuzione su istanze di backend, come database esterni o bucket Amazon Simple Storage Service (Amazon S3)

Risoluzione

1.    Verifica la presenza di problemi di connettività di rete utilizzando la procedura di risoluzione dei problemi in Risolvi i problemi relativi a Application Load Balancer.

2.    Usa lo strumento curl per misurare la risposta del primo byte e verificare se una risoluzione DNS lenta contribuisce alla latenza.

curl -kso /dev/null https://www.example.com -w "==============\n\n
| dnslookup: %{time_namelookup}\n
| connect: %{time_connect}\n
| appconnect: %{time_appconnect}\n
| pretransfer: %{time_pretransfer}\n
| starttransfer: %{time_starttransfer}\n
| total: %{time_total}\n
| size: %{size_download}\n
| HTTPCode=%{http_code}\n\n"

Esempio di output:

 | dnslookup: 0.005330
 | connect: 0.006682
 | appconnect: 0.026540
 | pretransfer: 0.026636
 | starttransfer: 0.076980
 | total: 0.077111
 | size: 12130
 | HTTPCode=200

Esegui questi test tramite Application Load Balancer. Quindi, esegui i test ignorando l'Application Load Balancer ai target. Questo approccio aiuta a isolare il componente che induce la latenza. Per ulteriori informazioni sulle funzionalità curl, consulta Come usare le funzionalità curl.

3.    Controlla le statistiche medie della metrica TargetResponseTime di Amazon CloudWatch per il tuo Application Load Balancer. Se il valore è elevato, è probabile che ci sia un problema con le istanze di backend o i server di dipendenza delle applicazioni.

4.    Determina quali istanze di backend presentano una latenza elevata controllando le voci del registro di accesso per l'Application Load Balancer. Controlla target_processing_time per trovare istanze di backend con problemi di latenza. Inoltre, esamina i campi request_processing_time e response_processing_time per verificare eventuali problemi con Application Load Balancer.

5.    Controlla la metrica di utilizzo della CPU di CloudWatch delle tue istanze di backend. Cerca un elevato utilizzo della CPU o dei picchi nell'utilizzo della CPU. Per un elevato utilizzo della CPU, valuta la possibilità di aggiornare le istanze a un tipo di istanza più grande.

6.    Verifica la presenza di problemi di memoria esaminando i processi di Apache sulle istanze di backend.

Comando di esempio:

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

7.    Controlla l'impostazione MaxClient per i server Web sulle tue istanze di backend. Questa impostazione definisce il numero di richieste simultanee che l'istanza può soddisfare. Per le istanze con un utilizzo appropriato della memoria e della CPU che presentano una latenza elevata, valuta la possibilità di aumentare il valore MaxClient.

Confronta il numero di processi generati da Apache (httpd) con l'impostazione MaxClient. Se il numero di processi Apache raggiunge spesso il valore MaxClient, valuta la possibilità di aumentare il valore.

[root@ip-192.0.2.0 conf]# ps aux | grep httpd | wc -l 15
<IfModule prefork.c>
StartServers         10
MinSpareServers      5
MaxSpareServers      10
ServerLimit          15
MaxClients           15
MaxRequestsPerChild  4000
</IfModule>

8.    Verifica le dipendenze delle tue istanze di backend che potrebbero causare problemi di latenza. Le dipendenze possono includere database condivisi o risorse esterne (come i bucket Amazon S3). Le dipendenze possono includere anche connessioni a risorse esterne, come istanze NAT (Network Address Translation), servizi Web remoti o server proxy.

9.    Utilizza i seguenti strumenti Linux per identificare i punti di bottleneck delle prestazioni sul server.

uptime: mostra le medie di carico per aiutare a determinare il numero di attività (processi) in attesa di esecuzione. Sui sistemi Linux, questo numero include i processi in attesa di esecuzione sulla CPU, nonché i processi bloccati in I/O di continuità (di solito I/O su disco). Questi dati forniscono un'analisi di alto livello del carico (o della domanda) di risorse che deve essere interpretato utilizzando altri strumenti. Quando le medie di carico di Linux aumentano, aumenta la richiesta di risorse. Per determinare quali risorse sono più richieste, è necessario utilizzare altre metriche. Ad esempio, per le CPU è possibile utilizzare mpstat -P ALL 1 per misurare l'utilizzo della CPU o top o pidstat 1 per misurare l'utilizzo della CPU per processo.

mpstat -P ALL 1: mostra i guasti del tempo della CPU per CPU, che puoi usare per verificare la presenza di uno squilibrio. Una singola CPU calda potrebbe indicare l'esistenza di un'applicazione a thread singolo.

pidstat 1: mostra l'utilizzo della CPU per processo e stampa un riepilogo continuo utile per osservare i modelli nel tempo.

dmesg | tail: mostra gli ultimi 10 messaggi di sistema, se presenti. Cerca errori che potrebbero causare problemi di prestazioni.

iostat -xz 1: mostra il carico di lavoro applicato ai dispositivi a blocchi (dischi) e le prestazioni risultanti.

free -m: mostra la quantità di memoria libera. Verifica che questi numeri non siano vicini allo zero, il che può portare a un I/O del disco più elevato (conferma utilizzando iostat) e a una riduzione delle prestazioni.

sar -n DEV 1: mostra la velocità effettiva dell'interfaccia di rete (rxkB/s e txkB/s) come misura del carico di lavoro. Controlla se sono stati raggiunti dei limiti.

sar -n TCP,ETCP 1: mostra le principali metriche TCP, tra cui: attive/s (numero di connessioni TCP avviate localmente al secondo), passive/s (numero di connessioni TCP avviate da remoto al secondo) e retrans/s (numero di ritrasmissioni TCP al secondo).

iftop: mostra le connessioni tra il server e un indirizzo IP remoto che consumano la maggior parte della larghezza di banda. n iftop è disponibile in un pacchetto con lo stesso nome su distribuzioni basate su Red Hat e Debian. Tuttavia, con le distribuzioni basate su Red Hat, potresti invece trovare n iftop in un repository di terze parti.


AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa