Zoeken op website

Cpustat - Bewaakt het CPU-gebruik door processen in Linux uit te voeren


Cpustat is een krachtig programma voor het meten van systeemprestaties voor Linux, geschreven in de programmeertaal Go. Het probeert het CPU-gebruik en de verzadiging op een effectieve manier bloot te leggen, met behulp van de Utilization Saturation and Error (USE) Method (een methodologie voor het analyseren van de prestaties van elk systeem).

Het extraheert monsters met een hogere frequentie van elk proces dat op het systeem wordt uitgevoerd en vat deze monsters vervolgens met een lagere frequentie samen. Het kan bijvoorbeeld elk proces elke 200 ms meten en deze voorbeelden elke 5 seconden samenvatten, inclusief min/gemiddelde/max-waarden voor bepaalde statistieken.

Voorgesteld lezen: 20 opdrachtregelhulpmiddelen om de prestaties van Linux te controleren

Cpustat voert gegevens op twee mogelijke manieren uit: een pure tekstlijst van het samenvattingsinterval en een kleurrijk scrollend dashboard van elk voorbeeld.

Hoe Cpustat onder Linux te installeren

Je moet Go (GoLang) op je Linux-systeem hebben geïnstalleerd om cpustat te kunnen gebruiken. Klik op de onderstaande link om de installatiestappen van GoLang te volgen, als je dat nog niet hebt gedaan het installeerde:

  1. Installeer GoLang (Go-programmeertaal) onder Linux

Nadat u Go heeft geïnstalleerd, typt u hieronder de opdracht go get om deze te installeren. Deze opdracht installeert het binaire bestand cpustat in uw GOBIN variabele:

go get github.com/uber-common/cpustat

Hoe CPUstat onder Linux te gebruiken

Wanneer het installatieproces is voltooid, voer je cpustat als volgt uit met rootrechten en gebruik je de sudo-opdracht, dat wil zeggen als je het systeem bestuurt als een niet-rootgebruiker, anders krijg je de foutmelding zoals weergegeven:

$GOBIN/cpustat
This program uses the netlink taskstats interface, so it must be run as root.

Opmerking: om cpustat uit te voeren, evenals alle andere Go-programma's die u op uw systeem hebt geïnstalleerd, zoals alle andere opdrachten, voegt u GOBIN toe variabele in uw PATH omgevingsvariabele. Open de onderstaande link voor meer informatie over het instellen van de PATH-variabele in Linux.

  1. Leer hoe u uw 'PATH-variabelen permanent instelt in Linux

Dit is hoe cpustat werkt; de map /proc wordt opgevraagd om de huidige lijst met proces-ID's voor elk interval op te halen, en:

  • lees voor elke PID /proc/pid/stat en bereken vervolgens het verschil met het vorige voorbeeld.
  • als het een nieuwe PID is, lees dan /proc/pid/cmdline.
  • stuur voor elke PID een netlink-bericht om de taakstatistieken op te halen en het verschil met het vorige voorbeeld te berekenen.
  • haal /proc/stat op om de algemene systeemstatistieken te krijgen.

Ook hier wordt elk slaapinterval aangepast om rekening te houden met de hoeveelheid tijd die nodig is om al deze statistieken op te halen. Bovendien registreert elk monster ook de tijd die nodig was om elke meting te schalen op basis van de werkelijk verstreken tijd tussen de monsters. Hiermee wordt geprobeerd rekening te houden met vertragingen in cpustat zelf.

Wanneer cpustat zonder argumenten wordt uitgevoerd, wordt standaard het volgende weergegeven: samplinginterval: 200 ms, samenvattingsinterval: 2s (10 samples), top 10 procs weergegeven, gebruikersfilter: all, pid-filter: all as weergegeven in de onderstaande schermafbeelding:

sudo $GOBIN/cpustat 

Uit de bovenstaande uitvoer blijkt het volgende de betekenis van de systeembrede samenvattende statistieken die vóór de velden worden weergegeven:

  • usr – min/avg/max looptijd van de gebruikersmodus als percentage van een CPU.
  • sys – min/avg/max looptijd van de systeemmodus als percentage van een CPU.
  • leuk – min/avg/max gebruikersmodus runtime met lage prioriteit als percentage van een CPU.
  • inactief – min/avg/max looptijd van de gebruikersmodus als percentage van een CPU.
  • iowait – min/avg/max vertragingstijd bij wachten op schijf-IO.
  • prun – min/avg/max aantal processen in een uitvoerbare staat (hetzelfde als het gemiddelde van de belasting).
  • pblock – min/avg/max aantal geblokkeerde processen op schijf-IO.
  • pstart – aantal processen/threads gestart in dit samenvattingsinterval.

Nog steeds uit de bovenstaande uitvoer betekenen de verschillende kolommen voor een bepaald proces:

  • naam – algemene procesnaam uit /proc/pid/stat of /proc/pid/cmdline.
  • pid – proces-ID, ook wel “tgid” genoemd.
  • min – laagste steekproef van gebruiker+systeemtijd voor de pid, gemeten vanaf /proc/pid/stat. Schaal is een percentage van een CPU.
  • max – hoogste steekproef van gebruiker+systeemtijd voor deze pid, ook gemeten vanuit /proc/pid/stat.
  • usr – gemiddelde gebruikerstijd voor de pid over de samenvattingsperiode, gemeten vanaf /proc/pid/stat.
  • sys – gemiddelde systeemtijd voor de pid over de samenvattingsperiode, gemeten vanaf /proc/pid/stat.
  • nice – geeft de huidige “nice”-waarde voor het proces aan, gemeten vanaf /proc/pid/stat. Hoger betekent ‘mooier’.
  • runq – de tijd die het proces en al zijn threads doorbrachten terwijl ze wachtten om te worden uitgevoerd, gemeten aan de hand van taakstatistieken via netlink. Schaal is een percentage van een CPU.
  • iow – de tijd die het proces en alle threads besteedden aan het blokkeren door schijf-IO, gemeten aan de hand van taakstatistieken via netlink. Schaal is een percentage van een CPU, gemiddeld over het samenvattingsinterval.
  • wisselen – de tijd die het proces en alle threads hebben besteed aan het wachten om te worden ingewisseld, gemeten aan de hand van taakstatistieken via netlink. Schaal is een percentage van een CPU, gemiddeld over het samenvattingsinterval.
  • vcx en icx – totaal aantal vrijwillige contextwisselingen door het proces en alle threads ervan gedurende het samenvattingsinterval, gemeten aan de hand van taakstatistieken via netlink.
  • rss – huidige RSS-waarde opgehaald uit /proc/pid/stat. Het is de hoeveelheid geheugen die dit proces gebruikt.
  • ctime – som van gebruiker+sys CPU-tijd die wordt verbruikt door te wachten op kinderen die zijn afgesloten tijdens dit samenvattingsinterval, gemeten vanaf /proc/pid/stat.

Houd er rekening mee dat langlopende onderliggende processen deze meting vaak kunnen verwarren, omdat de tijd alleen wordt gerapporteerd wanneer het onderliggende proces wordt afgesloten. Dit is echter handig voor het meten van de impact van frequente cron-taken en gezondheidscontroles waarbij de CPU-tijd vaak wordt verbruikt door veel onderliggende processen.

  • derde – aantal threads aan het einde van het samenvattingsinterval, gemeten vanaf /proc/pid/stat.
  • sam – aantal monsters voor dit proces opgenomen in het samenvattingsinterval. Processen die onlangs zijn gestart of beëindigd, zijn mogelijk voor minder monsters zichtbaar geweest dan het samenvattingsinterval.

Met de volgende opdracht worden de top 10 rootgebruikersprocessen weergegeven die op het systeem worden uitgevoerd:

sudo $GOBIN/cpustat -u root

Om de uitvoer in een fraaie terminalmodus weer te geven, gebruikt u de vlag -t als volgt:

sudo $GOBIN/cpustat -u roo -t

Om het top x aantal processen te bekijken (de standaardwaarde is 10), kun je de vlag -n gebruiken. De volgende opdracht toont de top 20 Linux-processen die op het systeem draaien:

sudo $GOBIN/cpustat -n 20 

Je kunt ook als volgt een CPU-profiel naar een bestand schrijven met de optie -cpuprofile en vervolgens de opdracht cat gebruiken om het bestand te bekijken:

sudo $GOBIN/cpustat -cpuprofile cpuprof.txt
cat cpuprof.txt

Om helpinformatie weer te geven, gebruikt u de vlag -h als volgt:

sudo $GOBIN/cpustat -h

Vind aanvullende informatie uit de cpustat Github Repository: https://github.com/uber-common/cpustat

Dat is alles! In dit artikel hebben we u laten zien hoe u cpustat installeert en gebruikt, een handig hulpmiddel voor het meten van systeemprestaties voor Linux. Deel uw mening met ons via het commentaar hieronder.