Ricerca nel sito web

Come monitorare l'utilizzo del sistema, le interruzioni e la risoluzione dei problemi dei server Linux - Parte 9


Sebbene Linux sia molto affidabile, gli amministratori di sistema saggi dovrebbero trovare un modo per tenere sempre d’occhio il comportamento e l’utilizzo del sistema. Garantire un tempo di attività il più vicino possibile al 100% e la disponibilità delle risorse sono esigenze fondamentali in molti ambienti. Esaminare lo stato passato e attuale del sistema ci consentirà di prevedere e molto probabilmente prevenire possibili problemi.

Presentazione del programma di certificazione Linux Foundation

In questo articolo presenteremo un elenco di alcuni strumenti disponibili nella maggior parte delle distribuzioni upstream per verificare lo stato del sistema, analizzare le interruzioni e risolvere i problemi in corso. Nello specifico, tra la miriade di dati disponibili, ci concentreremo su CPU, spazio di archiviazione e utilizzo della memoria, gestione di base dei processi e analisi dei log.

Utilizzo dello spazio di archiviazione

Esistono 2 comandi ben noti in Linux che vengono utilizzati per controllare l'utilizzo dello spazio di archiviazione: df e du.

Il primo, df (che sta per disk free), viene generalmente utilizzato per segnalare l'utilizzo complessivo dello spazio su disco per file system.

Esempio 1: reporting dell'utilizzo dello spazio su disco in byte e in formato leggibile

Senza opzioni, df riporta l'utilizzo dello spazio su disco in byte. Con il flag -h verranno visualizzate le stesse informazioni utilizzando invece MB o GB. Tieni presente che questo report include anche la dimensione totale di ciascun file system (in blocchi da 1 K), gli spazi liberi e disponibili e il punto di montaggio di ciascun dispositivo di archiviazione.

df
df -h

Questo è certamente una cosa positiva, ma c’è un’altra limitazione che può rendere inutilizzabile un file system, e cioè l’esaurimento degli inode. Tutti i file in un file system sono mappati su un inode che ne contiene i metadati.

Esempio 2: ispezione dell'utilizzo degli inode da parte del file system in formato leggibile dall'uomo con
df -hTi

puoi vedere la quantità di inode utilizzati e disponibili:

Secondo l'immagine sopra, ci sono 146 inode utilizzati (1%) in /home, il che significa che puoi ancora creare file da 226K in quel file system.

Esempio 3: ricerca e/o eliminazione di file e directory vuoti

Tieni presente che puoi esaurire lo spazio di archiviazione molto prima di esaurire gli inode e viceversa. Per questo motivo è necessario monitorare non solo l'utilizzo dello spazio di archiviazione ma anche il numero di inode utilizzati dal file system.

Utilizza i seguenti comandi per trovare file o directory vuoti (che occupano 0B) che utilizzano inode senza motivo:

find  /home -type f -empty
find  /home -type d -empty

Inoltre, puoi aggiungere il flag -delete alla fine di ciascun comando se desideri eliminare anche i file e le directory vuoti:

find  /home -type f -empty --delete
find  /home -type f -empty

La procedura precedente ha eliminato 4 file. Controlliamo nuovamente il numero di nodi utilizzati/disponibili in /home:

df -hTi | grep home

Come puoi vedere, ora ci sono 142 inode utilizzati (4 in meno rispetto a prima).

Esempio 4: esame dell'utilizzo del disco per directory

Se l'utilizzo di un determinato file system è superiore a una percentuale predefinita, puoi utilizzare du (abbreviazione di utilizzo del disco) per scoprire quali sono i file che occupano più spazio.

L'esempio è dato per /var, che come puoi vedere nella prima immagine sopra, è utilizzato al 67%.

du -sch /var/*

Nota: puoi passare a una qualsiasi delle sottodirectory sopra per scoprire esattamente cosa c'è al loro interno e quanto occupa ciascun elemento. È quindi possibile utilizzare tali informazioni per eliminare alcuni file se non sono necessari o per estendere la dimensione del volume logico, se necessario.

Leggi anche

  1. 12 utili comandi “df” per controllare lo spazio su disco
  2. 10 comandi "du" utili per trovare l'utilizzo del disco di file e directory

Utilizzo della memoria e della CPU

Il classico strumento Linux utilizzato per eseguire un controllo generale dell'utilizzo della CPU/memoria e della gestione dei processi è il comando principale. Inoltre, la parte superiore mostra una vista in tempo reale di un sistema in funzione. Esistono altri strumenti che potrebbero essere utilizzati per lo stesso scopo, come htop, ma ho optato per top perché è installato immediatamente in qualsiasi distribuzione Linux.

Esempio 5: visualizzazione dello stato live del sistema con top

Per iniziare dall'alto, digita semplicemente il seguente comando nella riga di comando e premi Invio.

top

Esaminiamo un tipico output top:

Nelle righe da 1 a 5 vengono visualizzate le seguenti informazioni:

1. L'ora corrente (20:41:32) e il tempo di attività (7 ore e 41 minuti). Un solo utente ha effettuato l'accesso al sistema e il carico è stato medio rispettivamente negli ultimi 1, 5 e 15 minuti. 0.00, 0.01 e 0.05 indicano che in questi intervalli di tempo, il sistema è rimasto inattivo per lo 0% del tempo (0.00: nessun processo era in attesa della CPU), quindi è stato sovraccaricato dell'1% (0.01: una media di 0.01 processi stavano aspettando la CPU) e il 5% (0,05). Se inferiore a 0 e più piccolo è il numero (0,65, ad esempio), il sistema è rimasto inattivo per il 35% durante gli ultimi 1, 5 o 15 minuti, a seconda di dove appare 0,65.

2. Attualmente ci sono 121 processi in esecuzione (puoi vedere l'elenco completo in 6). Solo 1 di loro è in esecuzione (in alto in questo caso, come puoi vedere nella colonna %CPU) e i restanti 120 sono in attesa in background ma sono "dormienti" e rimarranno in quello stato finché non li chiameremo. Come? Puoi verificarlo aprendo un prompt mysql ed eseguendo un paio di query. Noterai come aumenta il numero di processi in esecuzione.

In alternativa, puoi aprire un browser web e navigare verso qualsiasi pagina fornita da Apache e otterrai lo stesso risultato. Naturalmente, questi esempi presuppongono che entrambi i servizi siano installati sul tuo server.

3. us (tempo di esecuzione dei processi utente con priorità non modificata), sy (tempo di esecuzione dei processi del kernel), ni (tempo di esecuzione dei processi utente con priorità modificata), wa (tempo di attesa per il completamento I/O), hi (tempo impiegato per la manutenzione degli interrupt hardware), si (tempo impiegato per la manutenzione degli interrupt software), st (tempo rubato alla macchina virtuale corrente dall'hypervisor - solo in ambienti virtualizzati).

4. Utilizzo della memoria fisica.

5. Scambia l'utilizzo dello spazio.

Esempio 6: controllo dell'utilizzo della memoria fisica

Per controllare la memoria RAM e l'utilizzo dello swap puoi anche usare il comando free.

free

Naturalmente puoi anche utilizzare gli interruttori -m (MB) o -g (GB) per visualizzare le stesse informazioni in formato leggibile:

free -m

In ogni caso, bisogna essere consapevoli del fatto che il kernel riserva quanta più memoria possibile e la rende disponibile ai processi quando ne fanno richiesta. In particolare, la riga "-/+ buffers/cache" mostra i valori effettivi dopo che questa cache I/O è stata presa in considerazione.

In altre parole, la quantità di memoria utilizzata dai processi e la quantità disponibile per altri processi (in questo caso, rispettivamente 232 MB utilizzati e 270 MB disponibili). Quando i processi necessitano di questa memoria, il kernel ridurrà automaticamente la dimensione della cache I/O.

Leggi anche: 10 utili comandi “free” per controllare l'utilizzo della memoria di Linux

Uno sguardo più da vicino ai processi

In qualsiasi momento, ci sono molti processi in esecuzione sul nostro sistema Linux. Esistono due strumenti che utilizzeremo per monitorare da vicino i processi: ps e pstree.

Esempio 7: visualizzazione dell'intero elenco dei processi nel sistema con ps (formato standard completo)

Usando le opzioni -e e -f combinate in una (-ef) puoi elencare tutti i processi attualmente in esecuzione sul tuo sistema. Puoi reindirizzare questo output ad altri strumenti, come grep (come spiegato nella Parte 1 della serie LFCS) per restringere l'output ai processi desiderati:

ps -ef | grep -i squid | grep -v grep

L'elenco dei processi riportato sopra mostra le seguenti informazioni:

proprietario del processo, PID, PID genitore (il processo genitore), utilizzo del processore, ora di avvio del comando, tty (il ? indica che è un demone), tempo CPU cumulativo e comando associato al processo.

Esempio 8: personalizzazione e ordinamento dell'output di ps

Tuttavia, forse non hai bisogno di tutte queste informazioni e vorresti mostrare il proprietario del processo, il comando che lo ha avviato, il suo PID e PPID e la percentuale di memoria che sta attualmente utilizzando - in quest'ordine e ordinare per utilizzo della memoria in ordine decrescente (nota che ps per impostazione predefinita è ordinato in base al PID).

ps -eo user,comm,pid,ppid,%mem --sort -%mem

Dove il segno meno davanti a %mem indica l'ordinamento in ordine decrescente.

Se per qualche motivo un processo inizia a richiedere troppe risorse di sistema e rischia di mettere a repentaglio la funzionalità complessiva del sistema, ti consigliamo di interrompere o mettere in pausa la sua esecuzione passandogli uno dei seguenti segnali utilizzando il programma kill. Altri motivi per cui potresti prendere in considerazione questa operazione sono quando hai avviato un processo in primo piano ma desideri metterlo in pausa e riprenderlo in background.

Signal name Signal number Description
 SIGTERM 15  Kill the process gracefully.
 SIGINT 2  This is the signal that is sent when we press Ctrl + C. It aims to interrupt the process, but the process may ignore it.
 SIGKILL 9  This signal also interrupts the process but it does so unconditionally (use with care!) since a process cannot ignore it.
 SIGHUP 1  Short for “Hang UP”, this signals instructs daemons to reread its configuration file without actually stopping the process.
 SIGTSTP 20  Pause execution and wait ready to continue. This is the signal that is sent when we type the Ctrl + Z key combination.
 SIGSTOP 19  The process is paused and doesn’t get any more attention from the CPU cycles until it is restarted.
 SIGCONT 18  This signal tells the process to resume execution after having received either SIGTSTP or SIGSTOP. This is the signal that is sent by the shell when we use the fg or bg commands.
Esempio 9: sospendere l'esecuzione di un processo in esecuzione e riprenderlo in background

Quando la normale esecuzione di un determinato processo implica che nessun output verrà inviato allo schermo mentre è in esecuzione, potresti voler avviarlo in background (aggiungendo una e commerciale alla fine del comando).

process_name &

o,
Una volta che ha iniziato a funzionare in primo piano, mettilo in pausa e invialo in background con

Ctrl + Z
kill -18 PID

Esempio 10: Uccidere con la forza un processo “impazzito”

Tieni presente che ciascuna distribuzione fornisce strumenti per arrestare/avviare/riavviare/ricaricare con garbo servizi comuni, come service nei sistemi basati su SysV o systemctl nei sistemi basati su Systemd.

Se un processo non risponde a queste utilità, puoi ucciderlo con la forza inviandogli il segnale SIGKILL.

ps -ef | grep apache
kill -9 3821

Quindi... cosa è successo/sta succedendo?

Quando si verifica un qualsiasi tipo di interruzione nel sistema (che si tratti di un'interruzione di corrente, di un guasto hardware, di un'interruzione pianificata o non pianificata di un processo o di qualsiasi anomalia), i registri in /var/log sono i tuoi migliori amici per determinare cosa è successo o cosa potrebbe causare i problemi che stai affrontando.

cd /var/log

Alcuni degli elementi in /var/log sono normali file di testo, altri sono directory e altri ancora sono file compressi di log ruotati (storici). Ti consigliamo di controllare quelli con la parola errore nel nome, ma anche controllare il resto può tornare utile.

Esempio 11: esame dei log per individuare eventuali errori nei processi

Immagina questo scenario. I client LAN non sono in grado di stampare sulle stampanti di rete. Il primo passo per risolvere questa situazione è andare nella directory /var/log/cups e vedere cosa c'è dentro.

Puoi utilizzare il comando tail per visualizzare le ultime 10 righe del file error_log oppure tail -f error_log per una visualizzazione in tempo reale del log.

cd /var/log/cups
ls
tail error_log

Lo screenshot sopra fornisce alcune informazioni utili per capire cosa potrebbe causare il problema. Tieni presente che seguire i passaggi o correggere il malfunzionamento del processo potrebbe non risolvere il problema generale, ma se ti abitui fin dall'inizio a controllare i registri ogni volta che si verifica un problema (sia esso locale o di rete) Sarò sicuramente sulla strada giusta.

Esempio 12: esame dei registri per individuare eventuali guasti hardware

Sebbene i guasti hardware possano essere difficili da risolvere, dovresti controllare dmesg, i log dei messaggi e grep per parole correlate a una parte hardware presumibilmente difettosa.

L'immagine seguente è presa da /var/log/messages dopo aver cercato la parola errore utilizzando il seguente comando:

less /var/log/messages | grep -i error

Possiamo vedere che stiamo riscontrando un problema con due dispositivi di archiviazione: /dev/sdb e /dev/sdc, che a loro volta causano un problema con l'array RAID.

Conclusione

In questo articolo abbiamo esplorato alcuni degli strumenti che possono aiutarti a essere sempre consapevole dello stato generale del tuo sistema. Inoltre, devi assicurarti che il tuo sistema operativo e i pacchetti installati siano aggiornati alle ultime versioni stabili. E non dimenticare mai e poi mai di controllare i registri! Allora sarai indirizzato nella giusta direzione per trovare la soluzione definitiva a qualsiasi problema.

Sentiti libero di lasciare i tuoi commenti, suggerimenti o domande, se ne hai, utilizzando il modulo sottostante.