Come posso risolvere l'incremento del parametro TargetResponseTime per un Application Load Balancer?
Ho notato un incremento nel parametro TargetResponseTime nell’Application Load Balancer. Come posso risolvere questo problema?
Breve descrizione
TargetResponseTime è il tempo trascorso, in secondi, tra il momento in cui la richiesta lascia il bilanciatore del carico e la ricezione di una risposta dalla destinazione. È equivalente al campo target_processing_time nei registri di accesso di Application Load Balancer.
Le possibili cause di un aumento di TargetResponseTime includono:
- Gli host non sono integri.
- Le istanze di back-end sono sopraffatte dal numero eccessivo di richieste.
- L'utilizzo della CPU nelle istanze di back-end è elevato.
- Una o più destinazioni sono difettose.
- Le dipendenze delle applicazioni Web in esecuzione sulle istanze di back-end hanno dei problemi.
Risoluzione
Gli host non sono integri
Verifica che tutte le destinazioni di Application Load Balancer siano integre. Consulta In che modo è possibile risolvere i problemi relativi ai controlli dell'integrità non riusciti di Application Load Balancer?
Le istanze di back-end sono sovraccaricate dal numero eccessivo di richieste
Controlla la statistica Sum dei parametri RequestCount e ActiveConnectionCount di Amazon CloudWatch per il l'Application Load Balancer. Un aumento del valore Sum che coincide con l'incremento di TargetResponseTime può indicare che le istanze di back-end sono sopraffatte dalla mole di richieste.
Per risolvere questo problema, configura un gruppo Auto Scaling per le istanze di back-end. Consulta il Tutorial: configurazione di un'applicazione dimensionabile e con bilanciamento del carico.
L'utilizzo della CPU nelle istanze di back-end è elevato
Controlla il parametro CPUUtilization di CloudWatch delle istanze di back-end. Se l'utilizzo della CPU è elevato o si verifica un picco di utilizzo, aggiorna le istanze a un tipo di istanza più grande.
Una o più destinazioni sono difettose
Se riscontri destinazioni difettose, segui questi passaggi per risolvere il problema:
1. Abilita la registrazione degli accessi per il bilanciatore del carico.
2. Scarica i registri di accesso per l'intervallo di tempo in cui il valore TargetResponseTime è elevato. Ad esempio, per scaricare i registri di accesso tra 2022-02-01T03:00 e 2022-02-01T03:35 utilizzando AWS Command Line Interface (AWS CLI):
aws s3 cp s3://bucket-name[/prefix]/AWSLogs/aws-account-id/elasticloadbalancing/region/2022/02/01/ ./alblogs --recursive --exclude "*" --include "*20220201T03[0123]*"
Nota: sostituisci bucket-name con il nome del tuo bucket, aws-account-id con l'ID del tuo account AWS e region con la regione AWS in cui si trova il tuo account.
3. Usa gli strumenti a riga di comando per analizzare i registri di accesso:
I registri di accesso di Elastic Load Balancing (ELB) sono compressi in formato .gzip.
Passaggio opzionale: per estrarre i registri, utilizza il seguente comando:
$ gzip -dr ./alblogs
Scenari di esempio
Per ottenere la latenza massima per target_processing_time, esegui il seguente comando.
File di log compresso:
$zcat *.log.gz | awk '$7 != -1' | awk 'BEGIN{a=0}{if ($7>0+a) a=$7} END{print a}'
File di log non compresso:
$cat *.log | awk '$7 != -1' | awk 'BEGIN{a=0}{if ($7>0+a) a=$7} END{print a}'
-oppure-
Per contare il numero di richieste che hanno un target_processing_time ">=N" secondi per destinazione, modifica N con il numero di secondi in base ai tuoi requisiti.
Comando di esempio per file di log compresso:
$zcat *.log.gz | awk '{if($7 >= N){print $5}}' | sort | uniq -c
Comando di esempio per file di log non compresso:
$cat *.log | awk '{if($7 >= N){print $5}}' | sort | uniq -c
Output di esempio:
12 10.10.20.111:80 12 10.10.60.163:80 254 10.10.70.7:80 6 10.10.80.109:80 20656 10.3.19.141:80
Nell'esempio precedente, la destinazione con indirizzo IP 10.3.19.141 è la principale responsabile dell'incremento di TargetResponseTime. In questo caso, controlla il sistema operativo (OS) e l'applicazione Web per la destinazione.
Le dipendenze delle applicazioni Web in esecuzione sulle istanze di back-end hanno dei problemi
Acquisisci i pacchetti sulla destinazione per identificare il ritardo nella risposta della destinazione. Per il sistema operativo Linux, usa tcpdump.
Per acquisire una trasmissione HTTP POST completa in entrata e in uscita, incluse le richieste e le risposte HTTP sulla porta TCP/80:
tcpdump -i any -ns 0 -A 'tcp dst port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504F5354 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x48545450 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x3C21444F'
Per acquisire una trasmissione HTTP GET completa in entrata e in uscita, incluse le richieste e le risposte HTTP sulla porta TCP/80:
tcpdump -i any -ns 0 -A 'tcp dst port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x48545450 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x3C21444F'
Output di esempio:
14:04:12.186593 IP 10.10.30.219.13000 > 10.10.60.10.http: Flags [P.], seq 641705534:641705793, ack 1587610435, win 106, options [nop,nop,TS val 1165674323 ecr 263805247], length 259: HTTP: GET / HTTP/1.1 E..7."@...I. .. < 2..P&?.>^..C...j9...... Ez.S..Y?GET / HTTP/1.1 X-Forwarded-For: 54.66.76.204 X-Forwarded-Proto: http X-Forwarded-Port: 80 Host: labalbinternet-1236602672.ap-southeast-2.elb.amazonaws.com X-Amzn-Trace-Id: Root=1-6254355c-15db4904726649b66a1e47d7 User-Agent: curl/7.79.1 Accept: */* ................
14:04:21.187892 IP 10.10.60.10.http > 10.10.30.219.13000: Flags [P.], seq 1:592, ack 259, win 488, options [nop,nop,TS val 263814250 ecr 1165674323], length 591: HTTP: HTTP/1.1 200 OK E...\.@.@.l. < ...P2.^..C&?.A....qn..... ..|jEz.SHTTP/1.1 200 OK Date: Mon, 11 Apr 2022 14:04:12 GMT Server: Apache/2.4.52 () OpenSSL/1.0.2k-fips X-Powered-By: PHP/7.2.34 Upgrade: h2,h2c Connection: Upgrade Transfer-Encoding: chunked Content-Type: text/html; charset=UTF-8 159 PHP file name: /index.php<br> ................
Nota: negli output di esempio precedenti, HTTP GET risponde alle 14:04:12 e la destinazione risponde alle 14:04:21. Il TargetResponseTime è di circa 9 secondi. Puoi utilizzare X-Amzn-Trace-Id: Root per tracciare questo record nei registri di accesso.
Comando di esempio per file di log compresso:
$zcat *.log.gz | awk '{if($20 ~ "1-6254355c-15db4904726649b66a1e47d7"){print $6,$7,$8 }}'
Comando di esempio per file di log non compresso:
$cat *.log | awk '{if($20 ~ "1-6254355c-15db4904726649b66a1e47d7"){print $6,$7,$8 }}'
Output di esempio:
0.008 9.002 0.000

Contenuto pertinente
- AWS UFFICIALEAggiornata un mese fa
- AWS UFFICIALEAggiornata 10 mesi fa
- AWS UFFICIALEAggiornata un anno fa