Cpustat - Monitorizează utilizarea CPU prin rularea proceselor în Linux


Cpustat este un program puternic de măsurare a performanței sistemului pentru Linux, scris folosind limbajul de programare Go. Încearcă să dezvăluie utilizarea și saturația CPU într-un mod eficient, folosind Metoda Utilizare Saturație și Erori (USE) (o metodologie pentru analiza performanței oricărui sistem).

Extrage mostre de frecvență mai mare din fiecare proces care se execută pe sistem și apoi rezumă aceste eșantioane la o frecvență mai mică. De exemplu, poate măsura fiecare proces la fiecare 200 ms și poate rezuma aceste eșantioane la fiecare 5 secunde, inclusiv valorile min/medie/max pentru anumite valori.

Cpustat emite date în două moduri posibile: o listă cu text pur a intervalului rezumat și un tablou de bord colorat cu derulare a fiecărui eșantion.

Cum se instalează Cpustat în Linux

Trebuie să aveți Go (GoLang) instalat pe sistemul dvs. Linux pentru a utiliza cpustat, faceți clic pe linkul de mai jos pentru a urma pașii de instalare GoLang, adică dacă nu aveți a instalat:

  1. Instalați GoLang (Limbajul de programare Go) în Linux

După ce ați instalat Go, tastați comanda go get de mai jos pentru a o instala, această comandă va instala binarul cpustat în GOBIN. variabilă:

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

Cum se utilizează Cpustat în Linux

Când procesul de instalare se termină, rulați cpustat după cum urmează, cu privilegii de rădăcină, folosind comanda sudo, adică dacă controlați sistemul ca utilizator non-root, altfel veți primi eroarea așa cum se arată:

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

Notă: pentru a rula cpustat, precum și toate celelalte programe Go pe care le-ați instalat pe sistem ca orice alte comenzi, includeți GOBIN din variabila de mediu PATH. Deschideți linkul de mai jos pentru a afla cum să setați variabila PATH în Linux.

  1. Aflați cum să setați permanent variabilele PATH în Linux

Acesta este modul în care funcționează cpustat; directorul /proc este interogat pentru a obține lista curentă de ID-uri de proces pentru fiecare interval și:

  • pentru fiecare PID, citiți /proc/pid/stat, apoi calculați diferența față de eșantionul anterior.
  • în cazul în care este un PID nou, citiți /proc/pid/cmdline.
  • pentru fiecare PID, trimiteți un mesaj netlink pentru a prelua statisticile sarcinilor, pentru a calcula diferența față de eșantionul anterior.
  • aduceți /proc/stat pentru a obține statisticile generale ale sistemului.

Din nou, fiecare interval de somn este ajustat pentru a ține cont de cantitatea de timp consumată pentru preluarea tuturor acestor statistici. În plus, fiecare eșantion înregistrează, de asemenea, timpul necesar pentru a scala fiecare măsurătoare în funcție de timpul real scurs între probe. Acest lucru încearcă să țină seama de întârzierile în cpustat în sine.

Când rulează fără niciun argument, cpustat va afișa în mod implicit următoarele: interval de eșantionare: 200 ms, interval rezumat: 2s (10 mostre), afișând primele 10 procese, filtru utilizator: toate, filtru pid: toate ca afișat în captura de ecran de mai jos:

$ sudo $GOBIN/cpustat 

Din rezultatul de mai sus, următoarele sunt semnificațiile valorilor rezumate la nivel de sistem afișate înaintea câmpurilor:

  • usr – durata de rulare în modul utilizator min/avg/max ca procent din CPU.
  • sys – timpul de rulare în modul sistem min/avg/max ca procent din CPU.
  • frumos – timpul de rulare cu prioritate scăzută în modul utilizator min/mediu/max, ca procent din CPU.
  • inactiv – timpul de rulare în modul utilizator min/mediu/max, ca procent din CPU.
  • iowait – timp de întârziere min/mediu/max de așteptare pentru IO disc.
  • taierea – numărul minim/mediu/max de procese într-o stare care poate fi executată (la fel ca media încărcării).
  • pblock – numărul minim/mediu/max de procese blocate pe disc.
  • pstart – numărul de procese/subiecte începute în acest interval de rezumat.

Tot din rezultatul de mai sus, pentru un proces dat, diferitele coloane înseamnă:

  • nume – nume de proces comun din /proc/pid/stat sau /proc/pid/cmdline.
  • pid – codul procesului, denumit și „tgid”.
  • min – cel mai mic eșantion de timp utilizator+sistem pentru pid, măsurat din /proc/pid/stat. Scara este un procent din CPU.
  • max – cel mai mare eșantion de timp utilizator+sistem pentru acest pid, măsurat și din /proc/pid/stat.
  • usr – timpul mediu de utilizare pentru pid-ul pe perioada rezumatului, măsurat din /proc/pid/stat.
  • sys – timpul mediu de sistem pentru pid în perioada rezumat, măsurat din /proc/pid/stat.
  • frumos – indică valoarea curentă „frumoasă” pentru proces, măsurată din /proc/pid/stat. Mai mare înseamnă „mai frumos”.
  • runq – durata procesului și a tuturor firelor de execuție petrecute pentru a fi rulate, dar așteaptă să fie rulate, măsurată din statisticile de activitate prin netlink. Scara este un procent din CPU.
  • iow – durata procesului și a tuturor firelor de execuție blocate de IO pe disc, măsurată din statisticile de activitate prin netlink. Scala este un procent al unui procesor, mediat pe intervalul de rezumat.
  • swap – durata procesului și a tuturor firelor de execuție petrecute așteptând să fie schimbate, măsurată din statisticile sarcinilor prin netlink. Scala este un procent al unui procesor, mediat pe intervalul de rezumat.
  • vcx și icx – numărul total de comutări voluntare de context de către proces și toate firele sale pe intervalul de rezumat, măsurate din taskstats prin netlink.
  • rss – valoarea RSS actuală preluată din /proc/pid/stat. Este cantitatea de memorie pe care o folosește acest proces.
  • ctime – suma timpului CPU user+sys consumat de copiii așteptați care au ieșit în acest interval de rezumat, măsurată din /proc/pid/stat.

Rețineți că procesele secundare care rulează îndelungate pot deseori să încurce această măsurătoare, deoarece timpul este raportat numai atunci când procesul copil iese. Cu toate acestea, acest lucru este util pentru măsurarea impactului lucrărilor cron frecvente și al verificărilor de sănătate în care timpul CPU este adesea consumat de multe procese copil.

  • thrd – numărul de fire la sfârșitul intervalului de rezumat, măsurat din /proc/pid/stat.
  • sam – numărul de mostre pentru acest proces inclus în intervalul rezumat. Este posibil ca procesele care au început sau au părăsit recent să fi fost vizibile pentru mai puține mostre decât intervalul de rezumat.

Următoarea comandă afișează primele 10 procese de utilizator root care rulează pe sistem:

$ sudo $GOBIN/cpustat -u root

Pentru a afișa rezultatul într-un mod de terminal elegant, utilizați marcatorul -t după cum urmează:

$ sudo $GOBIN/cpustat -u roo -t

Pentru a vedea primele 20 de procese Linux care rulează pe sistem:

$ sudo $GOBIN/cpustat -n 20 

De asemenea, puteți scrie profilul CPU într-un fișier folosind opțiunea -cpuprofile după cum urmează și apoi utilizați comanda cat pentru a vizualiza fișierul:

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

Pentru a afișa informații de ajutor, utilizați marcatorul -h după cum urmează:

$ sudo $GOBIN/cpustat -h

Găsiți informații suplimentare din depozitul Github cpustat: https://github.com/uber-common/cpustat

Asta e tot! În acest articol, v-am arătat cum să instalați și să utilizați cpustat, un instrument util de măsurare a performanței sistemului pentru Linux. Împărtășiți-vă gândurile cu noi prin secțiunea de comentarii de mai jos.