Usando AWS re:Post, accetti AWS re:Post Termini di utilizzo

Perché la mia istanza Linux EC2 non risponde a causa dell'utilizzo eccessivo delle risorse?

7 minuti di lettura
0

La mia istanza Linux di Amazon Elastic Compute Cloud (Amazon EC2) non risponde a causa dell'utilizzo eccessivo delle risorse. Come posso evitarlo?

Breve descrizione

Esistono diverse cause comuni per cui un'istanza non risponde:

  • Memoria: per impostazione predefinita, le istanze EC2 non dispongono di spazio di scambio allocato. L'esaurimento della memoria richiama il gestore Linux Out Of Memory (OOM). Il gestore OOM termina i processi, ad esempio un database, un server web o il servizio SSH.
  • Rete: senza la rete, il sistema non è in grado di rispondere alle richieste ARP derivanti dai controlli di stato. In questo caso, l'istanza non riesce a comunicare con altri host.
  • **Operazioni di I/O:**senza I/O su disco, le istruzioni di lettura o scrittura si bloccano. Ad esempio, creazione di file temporanei, letture da librerie di sistema o database.
  • CPU: tutte le attività precedenti richiedono tempo della CPU per funzionare. L'utilizzo della CPU al 100% per un periodo prolungato impedisce al kernel di eseguire le normali operazioni del sistema operativo.

Questi problemi potrebbero anche accumularsi in un effetto valanga. Ad esempio, si esaurisce la memoria e il gestore OOM termina un processo importante. Ora un secondo processo, basato sul primo processo che è stato interrotto, avvia un numero molto più elevato di cicli della CPU. Se questa attività è correlata al disco, questo ciclo potrebbe anche esaurire il volume Amazon Elastic Block Store (Amazon EBS). Inoltre, il problema potrebbe essere trasferito a un'altra istanza che prevede una comunicazione dall'istanza che non risponde.

Risoluzione

Se il tuo sistema utilizza molto la CPU o spesso non risponde a causa dell'eccessivo utilizzo delle risorse, procedi come segue:

Raccogli informazioni

Monitora l'utilizzo della CPU con Amazon CloudWatch

Utilizza uno strumento di monitoraggio come Amazon CloudWatch per osservare tendenze e modelli di elevato utilizzo delle risorse.

Utilizza strumenti di monitoraggio del sistema

Se disponi di più servizi e non sei sicuro di quale stia utilizzando eccessivamente le risorse, installa un'utilità come atop. Puoi anche usare strumenti come htop, top e sar. Tutti questi strumenti aiutano a identificare i processi che consumano la maggior parte dell'utilizzo della CPU. Per ulteriori informazioni, consulta quanto segue:

Ottieni maggiori informazioni sul processo responsabile dell'utilizzo elevato della CPU

Usa il comando pidstat o ps per ottenere informazioni più dettagliate sul processo. Le informazioni fornite nell'output del comando consentono di determinare se il processo è un processo di sistema o un processo utente. Per maggiori informazioni su come configurare e utilizzare gli strumenti necessari per eseguire questi comandi, consulta quanto segue:

  • pidstat(1) nella pagina manuale di Linux
  • ps(1) nella pagina manuale di Linux

Controlla i log di sistema

Controlla gli errori o gli avvisi correlati all'utilizzo elevato della CPU. Ad esempio, utilizza il comando dmesg per visualizzare i messaggi del kernel e visualizza i file /var/log/syslog o /var/log/messages per i messaggi di sistema. L'output dei comandi e i contenuti del file di log aiutano a identificare i problemi di sistema o di applicazione che causano problemi.

Esamina la cronologia dei comandi

Esamina la cronologia dei comandi per vedere se c'è stato un errore umano. La cronologia dei comandi si trova in genere nel file ~/.bash_history.

Controlla le attività pianificate

Controlla se ci sono attività pianificate o processi Cron in esecuzione sull'istanza EC2 che potrebbero causare un utilizzo elevato della CPU. Innanzitutto, conferma il timestamp dell'utilizzo elevato della CPU. Quindi esegui il seguente comando per ottenere l'elenco dei processi Cron:

sudo crontab -l
sudo cat /etc/crontab
sudo cat crontab -l -u <username>

Il comando precedente elenca la configurazione crontab per l'utente root. Includi l'opzione -u nel comando per controllare i cron per un utente specifico. Quindi, cerca l'ora in cui hai notato il problema. Controlla i tuoi log, includendo quanto segue:

/var/log/messages
/var/log/syslog
/var/log/dmesg
/var/log/cron.log

Usa il comando grep per filtrare le voci pertinenti per i processi Cron specifici che desideri esaminare. Conferma se si sono verificati errori relativi a uno dei cron identificati.

Verifica l'utilizzo della memoria

L'utilizzo elevato della memoria potrebbe comportare un utilizzo elevato della CPU a causa dell'utilizzo dello spazio di scambio. Usa il comando disponibile per controllare l'utilizzo della memoria. Per maggiori informazioni su come configurare e utilizzare gli strumenti necessari, consulta Sezionamento del comando disponibile sul sito web redhat.com.

Controlla il traffico di rete

Un traffico di rete elevato può causare un utilizzo elevato della CPU, soprattutto se l'istanza gestisce molte richieste di rete. Utilizza il comando iftop per monitorare il traffico di rete e valuta la possibilità di ottimizzare la configurazione di rete o di aggiornare il tipo di istanza, se necessario. Per maggiori informazioni su come configurare e utilizzare gli strumenti necessari, consulta Analisi dell'interfaccia Linux on demand con iftop sul sito web redhat.com.

Controlla l'I/O del disco

Un elevato I/O del disco potrebbe causare un utilizzo elevato della CPU. Utilizza il comando iostat per monitorare l'I/O del disco e identificare eventuali processi che potrebbero causare un I/O elevato. Per maggiori informazioni, consulta Segnalazione I/O dalla linea di comando Linux sul sito web redhat.com.

Agisci in base ai dati acquisiti

Ottimizza il codice

Se la tua applicazione causa un utilizzo elevato della CPU, ottimizza il codice. A tal fine, è necessario identificare ed eliminare i rallentamenti delle prestazioni. Strumenti di profilazione come perf o strace aiutano a identificare il codice problematico. Per maggiori informazioni su come configurare e utilizzare gli strumenti necessari, consulta quanto segue:

Aggiorna l'istanza

Se i processi utilizzano molte risorse per validi motivi, ad esempio un elevato numero di utenti, considera la possibilità di aggiornare la tua istanza.

Il sistema di ottimizzazione del calcolo AWS può aiutarti a decidere il tipo e la dimensione dell'istanza appropriati da utilizzare. Puoi anche prendere in considerazione il dimensionamento orizzontale utilizzando il dimensionamento automatico Amazon EC2.

Configura le regole di controllo di Linux

Se desideri una maggiore visibilità sui comandi utente e sulle modifiche alla configurazione, puoi configurare il sistema Linux Audit per tenere traccia delle modifiche.

Previeni l'utilizzo eccessivo futuro

  1. Prima di distribuire una nuova applicazione in produzione, crea un ambiente di test e un benchmark per determinare il calcolo, la memoria, l'EBS e la rete necessari. Implementa in base ai tuoi benchmark, sviluppando al contempo la tolleranza ai guasti. Per maggiori informazioni, consulta quanto segue: 
    Progetta interazioni in un sistema distribuito per prevenire guasti
    Tutorial: imposta un'applicazione dimensionabile e con bilanciamento del carico
  2. Assicurati che le applicazioni in esecuzione sull'istanza siano ottimizzate per le prestazioni. L'ottimizzazione implica la messa a punto dei file di configurazione, l'ottimizzazione delle query del database o l'ottimizzazione del codice.
  3. Se la tua applicazione è ricca di database, prendi in considerazione l'implementazione della memorizzazione nella cache per ridurre il numero di query al database.
  4. Assicurati che il tuo software sia aggiornato con le patch di sicurezza e le correzioni di bug più recenti. Il software obsoleto potrebbe causare problemi di prestazioni e vulnerabilità che portano a un utilizzo elevato della CPU.
  5. Se la tua applicazione riceve un volume di traffico elevato, prendi in considerazione l'utilizzo di un sistema di bilanciamento del carico per distribuire il traffico su più istanze EC2. Un sistema di bilanciamento del carico riduce l'utilizzo della CPU su qualsiasi istanza.
  6. Continua a monitorare le tue istanze e crea allarmi per determinate soglie di utilizzo delle risorse.
AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa