reale il Carico della CPU in Media su Linux
Linux Carico Medio è vecchia come le colline, e su come confusione, come pochi ingegneri, che può anche dire quello che realmente è, o come viene calcolato.,
Fortunatamente, Brendon Gregg ha una grande sintesi inclusa la sua storia, alle medie di carico di Linux: Solving the Mystery, dove puoi vedere il problema principale:
La media del carico di Linux include I/O
È così semplice. A differenza di tutti gli altri sistemi UNIX-like (Solaris,AIX, ecc.), Linux conta SIA processi in esecuzione/eseguibili CHE processi bloccati (uninterruptible), che di solito sono in attesa di I / O. Questa è una brutta cosa, e risale a una patch arcaica di 24 anni che Brendon ha trovato.
Perché ci interessa?,
Ci preoccupiamo perché su qualsiasi sistema ad uso misto (utilizzando sia CPU che I / O), la Media di carico risultante è altamente variabile e spesso inutile. Questo può essere particolarmente negativo con sistemi altamente filettati che possono causare I / O, quindi è facile avere dozzine o centinaia di loro bloccati su dischi lenti.
Ciò che molti di noi vogliono veramente è la misura tradizionale Unix della media del carico, che è il numero medio di processi eseguibili mediati nel tempo. Questo ci dice quanto è caricato il nostro sistema e possiamo guardare la coda come misura della saturazione, cioè, una coda di CPU continua significa che siamo sovraccaricati.
Quindi, come possiamo ottenerlo?
Vogliamo davvero la lunghezza della coda di esecuzione della CPU, che diventa > 0 quando i processi devono attendere la CPU. Ma è difficile ottenere con precisione, e il kernel Linux non è molto amichevole in questo settore.
Innanzitutto, ciò che la gente di Linux chiama la coda di esecuzione include attività in esecuzione, quindi non è proprio la coda, ma la coda più ciò che è in esecuzione. Questo è confuso, e quindi è necessario sottrarre il numero di CPU per ottenere un senso della coda reale.,
Diversi strumenti possono ottenere la dimensione corrente della coda di esecuzione istantanea. Questo è ciò che mostra la colonna vmstat “r” e “sar-q”; entrambi lo ottengono dalla metrica procs_running di /proc/stat.
Il problema è che questo è un conteggio istantaneo, quindi è molto rumoroso e deve essere mediato per ottenere dati utili, ma il kernel non lo farà per te. Idealmente ci sarebbe un output del kernel in / proc solo per CPU e I / O caricano solo le medie, ma nessuno lo ha ancora creato.,
Quindi abbiamo bisogno di uno strumento che cerchi di emulare come funziona la media del carico, campionando rapidamente questa dimensione della coda di esecuzione istantanea e calcolando la media nel tempo.
Introducendo runqstat
runqstat fa questo — è un semplice strumento da riga di comando scritto in Go che di default campiona questa dimensione della coda ogni 10ms e la media di questo su un secondo. L’obiettivo è una misura stabile e accurata di quanto sia occupato il sistema.,
Include opzioni per modificare la frequenza di campionamento e il tempo medio, oltre a sottrarre il numero di CPU in modo da poter vedere la dimensione effettiva della coda, se lo desideri.
Ha anche un’opzione per calcolare il conteggio medio bloccato, che in teoria è possibile sottrarre dalla Media del carico per ottenere una visione diversa della saturazione della CPU (e per vedere quanti problemi la media del carico ti sta causando).
Con questo strumento, i team ops hanno finalmente un buon modo per monitorare la saturazione dei loro server Linux.
Trova su Github-runqstat