Questo articolo è tratto dal capitolo 13 del libro Linux in Action, pubblicato da Manning.
Le prestazioni della tua macchina Linux sono state irregolari o insolitamente lente? Sospetti che la crescente domanda possa superare le tue risorse disponibili? Ecco alcune domande che dovresti farti:
- Quanto sei vicino all'esaurimento della CPU e delle risorse di memoria?
- C'è qualcosa che funziona inutilmente che potrebbe essere spento?
- C'è qualcosa che è stato eseguito come canaglia a tua insaputa?
Più risorse Linux
- Comandi Linux cheat sheet
- Cheat sheet sui comandi avanzati di Linux
- Corso online gratuito:Panoramica tecnica RHEL
- Cheat sheet della rete Linux
- Cheat sheet di SELinux
- Cheat sheet dei comandi comuni di Linux
- Cosa sono i container Linux?
- I nostri ultimi articoli su Linux
Dove dovresti cercare le risposte? Il top programma è un ottimo punto di partenza. Può darti una panoramica completa e autoaggiornante dei processi in esecuzione sul tuo sistema.
La figura seguente mostra una schermata tipica di top
dati. La prima riga fornisce l'ora corrente, il tempo trascorso dall'ultimo avvio del sistema, il numero di utenti attualmente connessi e le medie di carico per l'ultimo minuto, cinque minuti e 15 minuti. Queste informazioni possono essere restituite anche eseguendo uptime
.
Poiché stiamo cercando di risolvere i problemi di prestazioni, le colonne di dati che dovrebbero interessarci di più sono %CPU
(percentuale della capacità della CPU attualmente utilizzata da un determinato processo) e %MEM
(percentuale di capacità di memoria). Ti consigliamo in particolare di notare i processi visualizzati in cima all'elenco.
In questo caso, puoi vedere che il demone MySQL utilizza il 4,3% della CPU del server e, dalla colonna successiva, il 13% della sua memoria. Se segui quella riga a sinistra, vedrai che l'ID processo (PID) è 1367
e il processo è "di proprietà" di mysql
utente.
Forse concluderai che questo processo richiedeva più risorse di quanto si possa giustificare e che dovrà essere sacrificato (per il bene superiore, capisci). Quel top
display ti ha dato tutto ciò di cui hai bisogno per ucciderlo. Poiché MySQL è un servizio gestito da systemd (su quelle distribuzioni che usano systemd), la tua prima scelta dovrebbe essere quella di usare systemctl
per ridurre delicatamente il processo senza mettere a rischio i dati dell'applicazione.
systemctl stop mysqld
Se il processo che vuoi chiudere non è gestito da systemd, o se qualcosa è andato storto e systemctl
non è riuscito a fermarlo, puoi usare sia kill
o killall
per eliminare il tuo processo. Alcuni sistemi richiedono l'installazione di killall
come parte di psmisc
pacchetto. Passi il PID per kill
in questo modo:
kill 1367
killall
, d'altra parte, utilizza il nome del processo anziché il suo ID.
killall mysqld
Uccidere o uccidere tutti, questo è il problema . In realtà, la risposta è piuttosto ovvia. kill
chiuderà un singolo processo, basato sul PID, mentre killall
ucciderà tante istanze di un particolare programma quante sono in esecuzione. Quindi, se ci fossero due o tre istanze MySQL separate, forse appartenenti a utenti separati, tutto verrebbe interrotto. Prima di avviare killall
, assicurati che non ci siano processi con nomi simili che vuoi ancora in esecuzione che potrebbero diventare "danni collaterali".
Ovviamente dovrai anche eseguire systemctl disable
per assicurarti che il processo non si riavvii al prossimo avvio.
systemctl disable mysqld
Decifrazione in alto
Nel caso in cui ne avessi mai bisogno, la terza riga di top
l'output che hai visto un po 'prima ci fornisce valori temporali (come percentuali) per una serie di altre metriche della CPU. Ecco una rapida carrellata del miscuglio di acronimi che vedrai lì:
Metrico | Significato |
---|---|
us | Tempo di esecuzione di processi ad alta priorità (non graditi) |
sy | Tempo di esecuzione dei processi del kernel |
ni | Tempo di esecuzione di processi (carini) a bassa priorità |
id | Tempo trascorso inattivo |
wa | Tempo di attesa per il completamento degli eventi I/O |
hi | Tempo dedicato alla gestione degli interrupt hardware |
si | Tempo dedicato alla gestione degli interrupt software |
st | Tempo rubato a questa macchina virtuale dal suo hypervisor (host) |
La top
la visualizzazione può essere personalizzata in tempo reale tramite input da tastiera. Digita h
per saperne di più.
Creare problemi (simulare il carico della CPU)
Morire di vedere top
in azione ma, non lo sapresti, tutto fila liscio?
Perché non simulare un sovraccarico della CPU a livello di crisi? Proprio come i bambini, yes
emetterà rumore (digitale) continuamente fino a quando non viene detto di fermarsi. Ripensandoci, non sono affatto come i bambini.
Questo comando reindirizzerà quel rumore al /dev/null
usa e getta file e il &
il personaggio spingerà il processo in background, restituendoti il controllo della riga di comando. Per aumentare la pressione, lancia il comando ancora un paio di volte.
$ yes > /dev/null &
Questo dovrebbe tenerli occupati. Mentre tutto è in esecuzione, guarda top
per vedere cosa sta succedendo. Potresti anche provare a eseguire altre applicazioni per vedere quanto ci vorrà per rallentarle. Quando hai finito, esegui killall
per eliminare tutti i tuoi yes
sessioni in una volta sola.
$ killall yes