Perché la mia istanza Linux EC2 non risponde a causa dell'utilizzo eccessivo delle risorse?
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:
- How can I configure and use SAR to monitor performance metrics on my Amazon EC2 Linux instance?
- How can I use the atop tool to get historical utilization stats for processes on my EC2 Linux instance?
- Come posso configurare gli strumenti di monitoraggio ATOP e SAR per la mia istanza EC2 che esegue Amazon Linux, RHEL, CentOS o Ubuntu?
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:
- Registrazione e analisi dei profili delle prestazioni con perf
- Usa strace per tracciare le chiamate di sistema effettuate da un comando
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
- 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 - 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.
- Se la tua applicazione è ricca di database, prendi in considerazione l'implementazione della memorizzazione nella cache per ridurre il numero di query al database.
- 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.
- 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.
- Continua a monitorare le tue istanze e crea allarmi per determinate soglie di utilizzo delle risorse.
Contenuto pertinente
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata 10 mesi fa
- AWS UFFICIALEAggiornata un anno fa