Getting real CPU Load op de Linux
Linux Gemiddelde Load is zo oud als de heuvels, en ongeveer net zo verwarrend, zo weinig ingenieurs kan zelfs je vertellen wat het is of hoe het is berekend.,
Gelukkig heeft Brendon Gregg een geweldige samenvatting inclusief zijn geschiedenis, op Linux Load Averages: het oplossen van het mysterie, waar je het kernprobleem kunt zien:
Linux Load Average includes I/O
Het is zo eenvoudig als dat. In tegenstelling tot alle andere UNIX-achtige systemen (Solaris, AIX, enz.), Telt Linux zowel draaiende/draaibare processen als geblokkeerde (uninterruptible) processen, die meestal wachten op I / O. Dit is een slechte zaak, en dateert van een archaïsche 24 jaar oude patch die Brendon vond.
wat kan ons dat schelen?,
wij geven erom omdat op elk systeem voor gemengd gebruik (zowel CPU als I/O), het resulterende Belastinggemiddelde zeer variabel is en vaak nutteloos. Dit kan vooral slecht zijn met zeer-threaded systemen die I/O kunnen veroorzaken, dus het is gemakkelijk om tientallen of honderden van hen Geblokkeerd op trage schijven.
wat de meesten van ons echt willen is de traditionele Unix-maat voor het Belastinggemiddelde, dat is het gemiddelde aantal runnable processen dat gemiddeld in de tijd is. Dit vertelt ons hoe geladen ons systeem is, en we kunnen de wachtrij bekijken als een maat voor verzadiging, d.w.z., een voortdurende CPU wachtrij betekent w zijn we overbelast.
dus, hoe kunnen we dat krijgen?
we willen echt de lengte van de CPU-wachtrij, die > 0 wordt wanneer processen op de CPU moeten wachten. Maar het is moeilijk om nauwkeurig te krijgen, en de Linux kernel is niet erg vriendelijk op dit gebied.
ten eerste, wat Linux mensen de run queue noemen, bevat actieve taken, dus het is niet echt de queue, maar de queue plus wat er draait. Dat is verwarrend, en dus moet je het aantal CPU ‘ s Aftrekken om een gevoel van de echte wachtrij te krijgen.,
verschillende hulpmiddelen kunnen de huidige grootte van de onmiddellijke uitvoerwachtrij verkrijgen. Dit is wat de vmstat “r” kolom en “sar-q” laat zien; beide krijgen dit uit /proc/stat ‘ s procs_running metriek.
het probleem is dat dit een momentane telling is, dus het is erg lawaaierig en moet gemiddeld worden om nuttige gegevens te krijgen, maar de kernel zal dit niet voor je doen. Idealiter zou er een kernel output in /proc voor CPU alleen en I/O alleen belasting gemiddelden, maar niemand heeft dit nog gemaakt.,
dus hebben we een tool nodig die probeert te emuleren hoe Load Average werkt, door snel een sampling te maken van deze instant run wachtrijgrootte, en dit in de loop van de tijd Gemiddeld te maken.
introducerend runqstat
runqstat doet dit — het is een eenvoudig commandoregelgereedschap geschreven in Go dat standaard deze wachtrijgrootte om de 10ms samples en dit gemiddeld over een seconde. Het doel is een stabiele en nauwkeurige meting van hoe druk het systeem is.,
Het bevat opties om de sample rate en de gemiddelde tijd te veranderen, plus om het aantal CPU ‘ s af te trekken, zodat je gewoon de werkelijke wachtrijgrootte kunt zien als je wilt.
het heeft ook een optie om de gemiddelde geblokkeerde telling te berekenen, die je in theorie kunt aftrekken van het Belastinggemiddelde om een ander beeld te krijgen van de CPU-verzadiging (en om te zien hoeveel problemen het Belastinggemiddelde je veroorzaakt).
met deze tool hebben ops teams eindelijk een goede manier om de verzadiging van hun Linux servers te controleren.
zoek het op Github — runqstat