Cpustat - Monitort d'CPU Utilisatioun andeems Dir Prozesser am Linux leeft


Cpustat ass e mächtege Systemleistungsmoossprogramm fir Linux, geschriwwe mat Go Programméiersprooch. Et probéiert d'CPU Notzung a Sättigung op eng effektiv Manéier z'entdecken, andeems d'Utilization Saturation and Errors (USE) Method benotzt (eng Methodik fir d'Performance vun all System ze analyséieren).

Et extrahéiert méi héich Frequenz Echantillon vun all Prozess deen am System ausgefouert gëtt an resüméiert dann dës Echantillon op enger méi niddereger Frequenz. Zum Beispill kann et all Prozess all 200ms moossen an dës Echantillon all 5 Sekonnen zesummefaassen, inklusiv min/Duerchschnëtt/Max Wäerter fir bestëmmte Metriken.

Cpustat gëtt Daten op zwou méiglech Manéier eraus: eng reng Textlëscht vum Resuméintervall an e faarwege Scrolling-Dashboard vun all Probe.

Wéi installéiere ech Cpustat op Linux

Dir musst Go (GoLang) op Ärem Linux System installéiert hunn fir cpustat ze benotzen, klickt op de Link hei ënnen fir d'GoLang Installatiounsschrëtt ze verfollegen dat ass wann Dir se net installéiert hutt:

  1. Installéiere GoLang (Go Programméiersprooch) op Linux

Wann Dir Go installéiert hutt, gitt de Go get Kommando hei ënnen fir se z'installéieren, dëse Kommando installéiert de cpustat binär an Ärer GOBIN Variabel:

# go get github.com/uber-common/cpustat

Wéi benotzt Cpustat a Linux

Wann den Installatiounsprozess fäerdeg ass, lafen cpustat wéi follegt mat Root Privilegien mat dem sudo Kommando dat ass wann Dir de System als Net-root Benotzer kontrolléiert, soss kritt Dir de Feeler wéi gewisen:

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

Bemierkung: Fir cpustat wéi och all aner Go Programmer ze lafen, déi Dir op Ärem System installéiert hutt wéi all aner Kommandoen, gitt GOBIN Variabel an Ärer PATH Ëmfeldvariabel. Öffnen de Link hei ënnen fir ze léieren wéi Dir d'PATH Variabel a Linux setzt.

  1. Léiert wéi Dir Är PATH Variablen permanent a Linux setzt

Dëst ass wéi cpustat funktionnéiert; den /proc Verzeichnis gëtt gefrot fir déi aktuell Lëscht vu Prozess-IDs fir all Intervall ze kréien, an:

  • fir all PID, liest /proc/pid/stat, berechent dann den Ënnerscheed vum fréiere Probe.
  • am Fall wou et en neie PID ass, liest /proc/pid/cmdline.
  • fir all PID, schéckt en Netlink-Message fir d'Taskstate ze sichen, d'Differenz vum fréiere Probe berechnen.
  • fetch /proc/stat fir déi allgemeng Systemstatistiken ze kréien.

Erëm, all Schlofintervall gëtt ugepasst fir d'Quantitéit vun der Zäit verbraucht fir all dës Statistiken ze sichen. Ausserdeem registréiert all Probe och d'Zäit déi et gedauert huet fir all Miessung mat der aktueller vergaangener Zäit tëscht Proben ze skaléieren. Dëst probéiert Verspéidungen am cpustat selwer ze berechnen.

Wann Dir ouni Argumenter leeft, wäert de cpustat als Standard déi folgend weisen: Samplingintervall: 200ms, Resuméintervall: 2s (10 Proben), Top 10 Procs ze weisen, Benotzerfilter: all, Pid Filter: alles wéi am Screenshot hei ënnen gewisen:

$ sudo $GOBIN/cpustat 

Vun der Ausgab uewendriwwer sinn déi folgend Bedeitunge vun de systembreete Resumémetriken, déi virun de Felder ugewise ginn:

  • usr – min/avg/max Benotzermodus Lafzäit als Prozentsaz vun enger CPU.
  • sys – min/avg/max Systemmodus Lafzäit als Prozentsaz vun enger CPU.
  • ganz – min/avg/max Benotzermodus Low Prioritéit Lafzäit als Prozentsaz vun enger CPU.
  • Idle - min/avg/max Benotzermodus Lafzäit als Prozentsaz vun enger CPU.
  • iowait - min/avg/max Verzögerungszäit waart op Disk IO.
  • prun - min/avg/max Unzuel vu Prozesser an engem lafenden Zoustand (selwecht wéi d'Laaschtduerchschnëtt).
  • pblock – min/avg/max Unzuel vu Prozesser déi um Disk IO blockéiert sinn.
  • pstart - Zuel vu Prozesser/Threads, déi an dësem Resuméintervall ugefaangen hunn.

Nach ëmmer aus der Ausgab hei uewen, fir e bestëmmte Prozess, bedeiten déi verschidde Kolonnen:

  • Numm - gemeinsame Prozessnumm vun /proc/pid/stat oder /proc/pid/cmdline.
  • pid - Prozess ID, och als tgid bezeechent.
  • min - déi ënnescht Probe vu Benotzer+Systemzäit fir de Pid, gemooss vun /proc/pid/stat. Skala ass e Prozentsaz vun enger CPU.
  • max – héchste Probe vu Benotzer+Systemzäit fir dëse Pid, och gemooss vun /proc/pid/stat.
  • usr - duerchschnëttlech Benotzerzäit fir de Pid iwwer d'Zesummefaassungsperiod, gemooss vun /proc/pid/stat.
  • sys - duerchschnëttlech Systemzäit fir de Pid iwwer d'Zesummefaassungsperiod, gemooss vun /proc/pid/stat.
  • schéin - weist den aktuelle schéinen Wäert fir de Prozess un, gemooss vun /proc/pid/stat. Méi héich heescht méi schéin.
  • runq - Zäit de Prozess an all seng Threads déi lafend verbrauchen awer waarden fir ze lafen, gemooss vun Taskstats iwwer Netlink. Skala ass e Prozentsaz vun enger CPU.
  • iow - Zäit de Prozess an all seng Threads blockéiert vun Disk IO, gemooss vun Taskstats iwwer Netlink. Skala ass e Prozentsaz vun enger CPU, duerchschnëttlech iwwer de Resuméintervall.
  • Swap - Zäit de Prozess an all seng Threads, déi gewaart ginn, fir ersat ze ginn, gemooss vun Taskstats iwwer Netlink. Skala ass e Prozentsaz vun enger CPU, duerchschnëttlech iwwer de Resuméintervall.
  • vcx an icx - Gesamtzuel vu fräiwëllegen Kontextschalter vum Prozess an all seng Threads iwwer de Resuméintervall, gemooss vun Taskstaten iwwer Netlink.
  • rss – aktuellen RSS-Wäert gesammelt vun /proc/pid/stat. Et ass d'Quantitéit un Erënnerung déi dëse Prozess benotzt.
  • ctime – Zomm vun de Benotzer+sys CPU Zäit verbraucht vu gewaart fir Kanner déi während dësem Resuméintervall erausgaange sinn, gemooss vun /proc/pid/stat.

Bedenkt datt laang lafende Kannerprozesser dës Miessung dacks duerchernee kënnen, well d'Zäit nëmmen gemellt gëtt wann de Kannerprozess erausgeet. Wéi och ëmmer, dëst ass nëtzlech fir den Impakt vun dacks Cron Jobs a Gesondheetschecken ze moossen, wou d'CPU Zäit dacks vu ville Kannerprozesser verbraucht gëtt.

  • thrd - Zuel vun de thread um Enn vum Resuméintervall, gemooss vun /proc/pid/stat.
  • sam - Zuel vun de Proben fir dëse Prozess am Resuméintervall abegraff. Prozesser déi viru kuerzem ugefaang oder ofgeschloss sinn hu vläicht fir manner Proben sichtbar wéi de Resuméintervall.

De folgende Kommando weist d'Top 10 Root Benotzerprozesser déi um System lafen:

$ sudo $GOBIN/cpustat -u root

Fir d'Ausgab an engem ausgefalene Terminalmodus ze weisen, benotzt de -t Fändel wéi follegt:

$ sudo $GOBIN/cpustat -u roo -t

Fir déi Top 20 Linux Prozesser ze gesinn déi um System lafen:

$ sudo $GOBIN/cpustat -n 20 

Dir kënnt och CPU Profil op eng Datei schreiwen mat der -cpuprofile Optioun wéi follegt a benotzt dann de Cat Kommando fir d'Datei ze gesinn:

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

Fir Hëllef Infoen ze weisen, benotzt de -h Fändel wéi follegt:

$ sudo $GOBIN/cpustat -h

Fannt zousätzlech Informatioun vum cpustat Github Repository: https://github.com/uber-common/cpustat

Dat ass alles! An dësem Artikel hu mir Iech gewisen wéi Dir cpustat installéiere wëllt, en nëtzlecht System Performance Moossinstrument fir Linux. Deelt Är Gedanken mat eis iwwer de Kommentarsektioun hei drënner.