GNU/Linux >> Linux Esercitazione >  >> Linux

Introduzione al monitoraggio e all'ottimizzazione delle prestazioni di Linux

Questo è il primo articolo della nostra nuova serie sul monitoraggio e l'ottimizzazione delle prestazioni di Linux.

Gli amministratori di sistema Linux dovrebbero essere esperti nel monitoraggio e nell'ottimizzazione delle prestazioni di Linux. Questo articolo offre una panoramica di alto livello su come affrontare il monitoraggio e l'ottimizzazione delle prestazioni in Linux e sui vari sottosistemi (e parametri delle prestazioni) che devono essere monitorati.

Per identificare i colli di bottiglia del sistema e trovare soluzioni per risolverli, dovresti capire come funzionano i vari componenti di Linux. Ad esempio, come il kernel dà la preferenza a un processo Linux rispetto ad altri usando valori interessanti, come vengono gestiti gli interrupt I/O, come funziona la gestione della memoria, come funziona il file system Linux, come viene implementato il livello di rete in Linux, ecc. ,

Si noti che capire come funzionano i vari componenti (o sottosistemi) non è la stessa cosa che sapere quale comando eseguire per ottenere un determinato output. Ad esempio, potresti sapere che il comando "uptime" o "top" fornisce il "carico medio". Ma se non sai cosa significa e come funziona il sottosistema CPU (o processo), potresti non essere in grado di capirlo correttamente. Comprendere i sottosistemi è un compito in corso, che imparerai costantemente tutto il tempo.

A un livello molto alto, di seguito sono riportati i quattro sottosistemi che devono essere monitorati.

  • CPU
  • Memoria
  • I/O
  • Rete

1. CPU

Dovresti comprendere le quattro metriche di prestazioni critiche per la CPU:cambio di contesto, coda di esecuzione, utilizzo della CPU e media di carico.

Cambio di contesto

  • Quando la CPU passa da un processo (o thread) a un altro, viene chiamato come cambio di contesto.
  • Quando si verifica un cambio di processo, il kernel memorizza lo stato corrente della CPU (di un processo o thread) nella memoria.
  • Il kernel recupera anche lo stato precedentemente memorizzato (di un processo o thread) dalla memoria e lo inserisce nella CPU.
  • Il cambio di contesto è molto essenziale per il multitasking della CPU.
  • Tuttavia, un livello più elevato di cambio di contesto può causare problemi di prestazioni.

Esegui coda

  • Coda di esecuzione indica il numero totale di processi attivi nella coda corrente per la CPU.
  • Quando la CPU è pronta per eseguire un processo, lo preleva dalla coda di esecuzione in base alla priorità del processo.
  • Tieni presente che i processi in stato di sospensione o di attesa i/o non sono nella coda di esecuzione.
  • Quindi, un numero maggiore di processi nella coda di esecuzione può causare problemi di prestazioni.

Utilizzo della CPU

  • Indica quanta CPU viene attualmente utilizzata.
  • Questo è abbastanza semplice e puoi visualizzare l'utilizzo della CPU dal comando in alto.
  • Utilizzo CPU al 100% significa che il sistema è completamente caricato.
  • Quindi, una percentuale maggiore di utilizzo della CPU causerà problemi di prestazioni.

Carico medio

  • Indica il carico medio della CPU in un periodo di tempo specifico.
  • Su Linux, la media del carico viene visualizzata per gli ultimi 1 minuto, 5 minuti e 15 minuti. Questo è utile per vedere se il carico complessivo del sistema aumenta o diminuisce.
  • Ad esempio, una media del carico di "0,75 1,70 2,10" indica che il carico sul sistema sta diminuendo. 0,75 è la media del carico nell'ultimo minuto. 1,70 è la media del carico negli ultimi 5 minuti. 2.10 è la media del carico negli ultimi 15 minuti.
  • Tieni presente che questa media di carico viene calcolata combinando sia il numero totale di processi in coda, sia il numero totale di processi nello stato di attività non interrompibile.

2. Rete

  • Una buona comprensione dei concetti di TCP/IP è utile durante l'analisi di eventuali problemi di rete. Ne discuteremo di più in articoli futuri.
  • Per le interfacce di rete, dovresti monitorare il numero totale di pacchetti (e byte) ricevuti/inviati attraverso l'interfaccia, il numero di pacchetti eliminati, ecc.

3. I/O

  • I/O wait è la quantità di tempo che la CPU attende per l'I/O. Se vedi un i/o alto costante sul tuo sistema, indica un problema nel sottosistema del disco.
  • Dovresti anche monitorare letture/secondo e scritture/secondo. Questo è misurato in blocchi. cioè numero di blocchi letti/scritti al secondo. Questi sono anche indicati come bi e bo (block in and block out).
  • tps indica il totale delle transazioni al secondo, che è la somma di rtps (lettura delle transazioni al secondo) e wtps (scrittura delle transazioni al secondo).

4. Memoria

  • Come sai, la RAM è la tua memoria fisica. Se hai 4 GB di RAM installati sul tuo sistema, hai 4 GB di memoria fisica.
  • Memoria virtuale =spazio di scambio disponibile sul disco + memoria fisica. La memoria virtuale contiene sia lo spazio utente che lo spazio del kernel.
  • L'utilizzo di un sistema a 32 o 64 bit fa una grande differenza nel determinare la quantità di memoria che un processo può utilizzare.
  • Su un sistema a 32 bit un processo può accedere solo a un massimo di 4 GB di memoria virtuale. Su un sistema a 64 bit non esiste tale limitazione.
  • La RAM inutilizzata verrà utilizzata come cache del file system dal kernel.
  • Il sistema Linux si scambierà quando avrà bisogno di più memoria. cioè quando ha bisogno di più memoria rispetto alla memoria fisica. Quando esegue lo scambio, scrive le pagine di memoria meno utilizzate dalla memoria fisica nello spazio di scambio sul disco.
  • Molti scambi possono causare problemi di prestazioni, poiché il disco è molto più lento della memoria fisica e ci vuole tempo per scambiare le pagine di memoria dalla RAM al disco.

Tutti i 4 sottosistemi di cui sopra sono correlati. Solo perché vedi un alto numero di letture/secondo, o scritture/secondo, o attesa di I/O non significa che il problema sia presente con il sottosistema di I/O. Dipende anche da cosa sta facendo l'applicazione. Nella maggior parte dei casi, il problema di prestazioni potrebbe essere causato dall'applicazione in esecuzione sul sistema Linux.

Ricorda la regola 80/20:l'80% del miglioramento delle prestazioni deriva dall'ottimizzazione dell'applicazione e il restante 20% dall'ottimizzazione dei componenti dell'infrastruttura.

Sono disponibili vari strumenti per monitorare le prestazioni del sistema Linux. Ad esempio:top, free, ps, iostat, vmstat, mpstat, sar, tcpump, netstat, iozone, ecc. Discuteremo di più su questi strumenti e su come usarli nei prossimi articoli di questa serie.

Di seguito è riportato l'approccio in 4 fasi per identificare e risolvere un problema di prestazioni.

  • Fase 1 – Comprendere (e riprodurre) il problema: La metà del problema è risolta quando capisci chiaramente qual è il problema. Prima di provare a risolvere il problema delle prestazioni, lavora prima sulla definizione chiara del problema. Più tempo dedichi alla comprensione e alla definizione del problema, ti forniranno dettagli sufficienti per cercare le risposte nel posto giusto. Se possibile, prova a riprodurre il problema o almeno a simulare una situazione che ritieni assomigli molto al problema. Questo ti aiuterà in seguito a convalidare la soluzione che trovi per risolvere il problema di prestazioni.
  • Fase 2 – Monitora e raccogli i dati: Dopo aver definito chiaramente il problema, monitorare il sistema e cercare di raccogliere quanti più dati possibile sui vari sottosistemi. Sulla base di questi dati, viene visualizzato un elenco di potenziali problemi.
  • Passaggio 3 – Elimina e restringi i problemi: Dopo aver elencato i potenziali problemi, immergiti in ciascuno di essi ed elimina eventuali non problemi. Restringilo ulteriormente per vedere se si tratta di un problema relativo all'applicazione o all'infrastruttura. Approfondisci ulteriormente e restringe il campo a un componente specifico. Ad esempio, se si tratta di un problema di infrastruttura, restringerlo e identificare il sottosistema che causa il problema. Se si tratta di un problema del sottosistema di I/O, restringerlo a una partizione specifica, un gruppo raid, un LUN o un disco. Fondamentalmente, continua a approfondire finché non metti il ​​dito sulla causa principale del problema.
  • Fase 4 – Una modifica alla volta: Dopo aver ristretto un piccolo elenco di potenziali problemi, non tentare di apportare più modifiche contemporaneamente. Se apporti più modifiche, non sapresti quale ha risolto il problema originale. Più modifiche contemporaneamente potrebbero anche causare nuovi problemi, che inseguirai invece di risolvere il problema originale. Quindi, apporta una modifica alla volta e verifica se risolve il problema originale.

Nei prossimi articoli della serie sulle prestazioni, discuteremo di più su come monitorare e risolvere i problemi di prestazioni su CPU, memoria, I/O e sottosistemi di rete utilizzando vari strumenti di monitoraggio delle prestazioni di Linux.


Linux
  1. MySQL – Ottimizzazione e ottimizzazione delle prestazioni

  2. Un'introduzione al monitoraggio dell'account utente Linux

  3. 24 iostat, vmstat e mpstat Esempi per il monitoraggio delle prestazioni di Linux

  4. I 25 migliori strumenti di monitoraggio e debug delle prestazioni Linux

  5. Comprensione del carico medio del sistema operativo e coda di esecuzione/coda bloccata in termini di utilizzo della CPU in Linux

Una raccolta di utilità per semplificare la risoluzione dei problemi di rete Linux e l'ottimizzazione delle prestazioni

Installa lo strumento di monitoraggio delle prestazioni NetData su Linux

Un'introduzione alle metriche di Prometheus e al monitoraggio delle prestazioni

Un'introduzione all'hashing e ai checksum in Linux

3 suggerimenti per il miglioramento delle prestazioni dei processi Linux con priorità e affinità

Come creare il 100% del carico della CPU su un sistema Linux