Perché la mia istanza Amazon EC2 Linux non risponde?
La mia istanza Amazon Elastic Compute Cloud (Amazon EC2) non risponde Linux.
Breve descrizione
Le istanze EC2 non rispondono per i seguenti motivi:
- L'utilizzo della CPU è costantemente pari o prossimo al 100% e non consente al kernel di eseguire le tipiche operazioni del sistema operativo.
- L'istanza ha esaurito la memoria, quindi Linux Out of Memory (OOM) Manager ha interrotto processi come il database, il server web o il servizio SSH.
Nota: per impostazione predefinita, le istanze EC2 non allocano spazio di swap. - Il dispositivo root è pieno al 100% e non consente il completamento o l'avvio di altri processi, nel qual caso ricevi errori "No space left on device".
- L'istanza non riesce a comunicare con altri host a causa di problemi di rete.
- Problemi operativi di I/O causano il blocco delle istruzioni di lettura e scrittura, come la creazione di file temporanei, le letture dalle librerie di sistema o dai database.
I problemi precedenti possono anche accumularsi. Ad esempio, la memoria si esaurisce, per cui OOM Manager termina un processo chiave. Pertanto, un processo che si basa sul processo arrestato avvia un numero maggiore di cicli della CPU. Se il processo è correlato al disco, il ciclo potrebbe anche utilizzare tutto lo spazio del volume Amazon Elastic Block Store (Amazon EBS) disponibile. Oppure il problema potrebbe trasferirsi a un'istanza che prevede la comunicazione dall'istanza che non risponde.
Per risolvere il problema dell'istanza che non risponde, identificane la causa principale e intraprendi azioni di risoluzione suggerite in base alla causa riscontrata.
Risoluzione
Identifica la causa principale del problema
Monitora l'utilizzo della CPU con CloudWatch
Utilizza l'agente di Amazon CloudWatch per vedere l'andamento dell'utilizzo della CPU e identificare se il problema è costante, spontaneo o ricorrente.
Utilizza strumenti di monitoraggio del sistema
Se hai più servizi, devi identificare il servizio che utilizza eccessivamente le risorse. Utilizza strumenti come sar o atop e atopsar per ottenere statistiche di utilizzo cronologiche sui processi eseguiti dall'istanza. Per informazioni sulla configurazione degli strumenti, consulta Come posso configurare gli strumenti di monitoraggio ATOP e SAR per la mia istanza EC2 che esegue Amazon Linux, Red Hat Enterprise Linux (RHEL), CentOS o Ubuntu?
Controlla i log di sistema
Controlla i log di sistema per individuare eventuali errori legati all'utilizzo elevato delle risorse e identificare problemi del sistema o dell'applicazione.
Esegui questo comando per visualizzare i messaggi del kernel:
dmesg
Inoltre, controlla se nei file /var/log/syslog o /var/log/messages sono presenti messaggi di sistema.
Esamina la cronologia dei comandi
Controlla nel file ~/.bash_history la cronologia dei comandi per identificare problemi come uno script imprevisto in esecuzione in background.
Verifica se la memoria viene eccessivamente utilizzata
Esegui questo comando per controllare l'utilizzo della memoria:
free -h
Nell'output, controlla le colonne used e free per individuare l'utilizzo della memoria dell'istanza. Per ulteriori informazioni sul comando free, consulta Dissecting the free command: What the Linux sysadmin needs to know (Comando free: cosa deve sapere l'amministratore di un sistema Linux) sul sito web Red Hat.
Verifica se spazio di archiviazione viene utilizzato eccessivamente
Se l'utilizzo dello spazio di archiviazione del volume root è elevato, il dispositivo potrebbe essere pieno. Per individuare questo problema, controlla i log della console dell'istanza.
Risolvi i problemi causati da un utilizzo elevato della CPU
Identifica il processo che utilizza eccessivamente la CPU
Utilizza il comando pidstat o ps per ottenere informazioni più dettagliate sui processi, ad esempio se si tratta di un processo di sistema o utente. Per ulteriori informazioni sui comandi, consulta pidstat e ps sul sito web del manuale di Linux.
Controlla i processi pianificati
Controlla se processi pianificati o processi Cron eseguiti nell'istanza hanno causato un utilizzo elevato della CPU. Innanzitutto, controlla le metriche di CloudWatch per l'istanza in modo da identificare il timestamp del momento in cui il valore CPUUtilization era elevato.
Quindi esegui questo comando per ottenere l'elenco dei processi Cron:
sudo crontab -lsudo cat /etc/crontab sudo cat crontab -l
Nota: il comando precedente elenca la configurazione crontab dell'utente root. Per verificare la presenza di un utente specifico, aggiungi -u username al comando, quindi sostituisci username con il nome dell'utente.
Nell'output del comando, controlla i processi eseguiti nel momento in cui l'utilizzo della CPU era elevato.
Verifica i seguenti log:
- /var/log/messages/var/log/syslog
- /var/log/dmesg
- /var/log/cron.log
Utilizza il comando grep per individuare processi Cron specifici filtrando le voci nei log e verificare la presenza di errori. Per ulteriori informazioni sul comando, consulta grep sul sito web del manuale di Linux.
Controlla il traffico di rete
Un traffico di rete elevato potrebbe causare un utilizzo elevato della CPU, soprattutto se l'istanza gestisce un grande volume di richieste di rete.
Esegui questo comando per monitorare il traffico di rete:
iftop
Utilizza l'output del comando per ottimizzare, se possibile, la configurazione della rete. Assicurati che la configurazione non limiti il traffico di rete e che il traffico rientri nella larghezza di banda corretta per il tipo di istanza. Per ulteriori informazioni, consulta Linux interface analytics on-demand with iftop (Analisi dell'interfaccia Linux on demand con iftop) sul sito web Red Hat. Se il traffico di rete è costantemente elevato, è consigliabile aggiornare il tipo di istanza scegliendo una dimensione maggiore.
Controlla l'I/O del disco
Un I/O elevato del disco potrebbe causare un utilizzo elevato della CPU. Per identificare i processi che causano un I/O elevato, esegui questo comando:
iostat
Per ulteriori informazioni, consulta I/O reporting from the Linux command line (Generazione di report di I/O dalla riga di comando di Linux) sul sito web Red Hat.
Per terminare un processo che non serve, esegui il comando kill. Per ulteriori informazioni, consulta kill sul sito web del manuale di Linux.
Per risolvere ulteriormente i problemi relativi all'utilizzo elevato della CPU, consulta Come posso risolvere i problemi di utilizzo elevato della CPU di un'istanza Amazon EC2 Linux?
Risolvi i problemi di utilizzo elevato della memoria
Per risolvere i problemi di utilizzo elevato della memoria, consulta Come posso risolvere i problemi di utilizzo elevato della memoria nella mia istanza EC2 Linux?
Risolvi gli errori "no space left on device"
Per risolvere i problemi di utilizzo elevato del dispositivo root, utilizza la Console seriale EC2 per connetterti all'istanza ed eliminare i file non necessari. Puoi utilizzare la Console seriale EC2 per le istanze create in AWS Nitro System e per le istanze bare metal supportate. Per connetterti all'istanza quando utilizzi la Console seriale EC2, non serve una connessione attiva. Tuttavia, devi rispettare i prerequisiti della Console seriale EC2.
Se l'istanza non è raggiungibile e non hai già configurato l'accesso alla Console seriale, non puoi usare la Console seriale EC2. In questo caso, utilizza SSH per connetterti all'istanza e aumenta le dimensioni del volume Amazon EBS.
Se non riesci a utilizzare la Console seriale o SSH, avvia un'istanza di ripristino e utilizzala per eliminare i file non necessari. Per istruzioni, consulta Risolvi l'errore "No space left on device" in Come posso risolvere i problemi di un'istanza EC2 Linux che non supera il controllo dello stato a causa dell'uso eccessivo delle risorse?
Ottimizza il codice
Se l'applicazione causa un utilizzo elevato della CPU, identifica ed elimina i colli di bottiglia nelle prestazioni del codice. Utilizza strumenti come perf o strace per identificare i problemi derivanti dal codice. Per istruzioni, consulta Recording and analyzing performance profiles with perf (Registrazione e analisi dei profili delle prestazioni con perf) e How do I use strace to trace system calls made by a command? (Come posso utilizzare strace per tracciare le chiamate di sistema effettuate da un comando?) sul sito web Red Hat.
Aggiorna l'istanza
Se i processi utilizzano costantemente un grande volume di risorse per motivi validi, ad esempio un elevato numero di utenti, aumenta la dimensione dell'istanza. Per informazioni sui requisiti, consulta Quali passaggi devo eseguire prima di modificare il tipo di istanza della mia istanza EC2 Linux?
Utilizza AWS Compute Optimizer per stabilire il tipo e la dimensione dell'istanza corretti per i requisiti della configurazione in uso. Puoi anche utilizzare Amazon EC2 Auto Scaling per scalare orizzontalmente.
Configura le regole di audit di Linux
Per una maggiore visibilità dei comandi utente e delle modifiche apportate alla configurazione, configura il sistema Linux Audit in modo da tenere traccia delle modifiche.
Aggiorna la configurazione per evitare in futuro un utilizzo eccessivo delle risorse
Prima di distribuire una nuova applicazione in produzione, crea un ambiente di test. Utilizza l'ambiente per confrontare l'applicazione e determinare la capacità richiesta in termini di calcolo, memoria, dimensione del volume EBS e traffico di rete. Quindi distribuisci l'applicazione in base ai requisiti di riferimento. Per le best practice da seguire per ottenere la tolleranza ai guasti, consulta Progetta interazioni in un sistema distribuito per prevenire guasti.
Controlla i file di configurazione, le query del database e il codice in esecuzione nell'istanza per ottenere prestazioni elevate. Se l'applicazione utilizza un elevato numero di database, è consigliabile utilizzare il caching per ridurre il numero di query al database.
Assicurati che il software sia aggiornato con le patch di sicurezza e le correzioni di bug più recenti. Un software obsoleto potrebbe causare problemi di prestazioni e, di conseguenza, un utilizzo elevato della CPU.
Se l'applicazione riceve un volume di traffico elevato, utilizza un bilanciatore del carico per distribuire il traffico su più istanze EC2. Un bilanciatore del carico riduce l'utilizzo della CPU nelle singole istanze.
Monitora continuamente l'utilizzo delle risorse da parte delle istanze. Crea allarmi in CloudWatch per identificare automaticamente le istanze a rischio di utilizzo eccessivo delle risorse.
- Argomenti
- Compute
- Lingua
- Italiano
