LFCS: Monitorizarea proceselor Linux utilizează resursele și stabilește limitele proceselor pe o bază per utilizator - Partea 14


Datorită modificărilor recente din obiectivele examenului de certificare LFCS, care se aplică începând cu data de 2 februarie 2016, adăugăm articolele necesare seriei LFCS publicate aici. Pentru a vă pregăti pentru acest examen, sunteți puternic încurajați să faceți parte din seria LFCE.

Fiecare administrator de sistem Linux trebuie să știe cum să verifice integritatea și disponibilitatea hardware-ului, a resurselor și a proceselor-cheie. În plus, stabilirea limitelor de resurse pe bază de utilizator trebuie să facă parte și din setul de calificări.

În acest articol vom explora câteva modalități de a ne asigura că atât sistemul hardware, cât și software-ul se comportă corect, pentru a evita posibilele probleme care ar putea cauza nefuncționarea neașteptată a timpilor de producție și pierderi de bani.

Statistici procesoare de raportare pentru Linux

Cu mpstat puteți vedea activitățile fiecărui procesor individual sau ale sistemului în ansamblu, atât instantaneu, cât și instantaneu.

Pentru a utiliza acest instrument, va trebui să instalați sysstat :

# yum update && yum install sysstat              [On CentOS based systems]
# aptitutde update && aptitude install sysstat   [On Ubuntu based systems]
# zypper update && zypper install sysstat        [On openSUSE systems]

Citiți mai multe despre sysstat și utilitarele sale la Learn Sysstat și utilitățile sale mpstat, pidstat, iostat și sar în Linux

După ce ați instalat mpstat , utilizați-l pentru a genera rapoarte despre statisticile procesoarelor.

Pentru a afișa 3 rapoartele globale ale utilizării CPU ( -u ) pentru toate procesoarele (după cum indică -P ALL) la un interval de 2 secunde , face:

# mpstat -P ALL -u 2 3
Linux 3.19.0-32-generic (tecmint.com) 	Wednesday 30 March 2016 	_x86_64_	(4 CPU)

11:41:07  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:41:09  IST  all    5.85    0.00    1.12    0.12    0.00    0.00    0.00    0.00    0.00   92.91
11:41:09  IST    0    4.48    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   94.53
11:41:09  IST    1    2.50    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   97.00
11:41:09  IST    2    6.44    0.00    0.99    0.00    0.00    0.00    0.00    0.00    0.00   92.57
11:41:09  IST    3   10.45    0.00    1.99    0.00    0.00    0.00    0.00    0.00    0.00   87.56

11:41:09  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:41:11  IST  all   11.60    0.12    1.12    0.50    0.00    0.00    0.00    0.00    0.00   86.66
11:41:11  IST    0   10.50    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   88.50
11:41:11  IST    1   14.36    0.00    1.49    2.48    0.00    0.00    0.00    0.00    0.00   81.68
11:41:11  IST    2    2.00    0.50    1.00    0.00    0.00    0.00    0.00    0.00    0.00   96.50
11:41:11  IST    3   19.40    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   79.60

11:41:11  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:41:13  IST  all    5.69    0.00    1.24    0.00    0.00    0.00    0.00    0.00    0.00   93.07
11:41:13  IST    0    2.97    0.00    1.49    0.00    0.00    0.00    0.00    0.00    0.00   95.54
11:41:13  IST    1   10.78    0.00    1.47    0.00    0.00    0.00    0.00    0.00    0.00   87.75
11:41:13  IST    2    2.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   97.00
11:41:13  IST    3    6.93    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   92.57

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all    7.71    0.04    1.16    0.21    0.00    0.00    0.00    0.00    0.00   90.89
Average:       0    5.97    0.00    1.16    0.00    0.00    0.00    0.00    0.00    0.00   92.87
Average:       1    9.24    0.00    1.16    0.83    0.00    0.00    0.00    0.00    0.00   88.78
Average:       2    3.49    0.17    1.00    0.00    0.00    0.00    0.00    0.00    0.00   95.35
Average:       3   12.25    0.00    1.16    0.00    0.00    0.00    0.00    0.00    0.00   86.59

Pentru a vedea aceleași statistici pentru un CPU ( CPU 0 în exemplul următor), utilizați:

# mpstat -P 0 -u 2 3
Linux 3.19.0-32-generic (tecmint.com) 	Wednesday 30 March 2016 	_x86_64_	(4 CPU)

11:42:08  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:42:10  IST    0    3.00    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   96.50
11:42:12  IST    0    4.08    0.00    0.00    2.55    0.00    0.00    0.00    0.00    0.00   93.37
11:42:14  IST    0    9.74    0.00    0.51    0.00    0.00    0.00    0.00    0.00    0.00   89.74
Average:       0    5.58    0.00    0.34    0.85    0.00    0.00    0.00    0.00    0.00   93.23

Ieșirea comenzilor de mai sus arată aceste coloane:

  1. CPU: Processor number as an integer, or the word all as an average for all processors.
  2. %usr: Percentage of CPU utilization while running user level applications.
  3. %nice: Same as %usr, but with nice priority.
  4. %sys: Percentage of CPU utilization that occurred while executing kernel applications. This does not include time spent dealing with interrupts or handling hardware.
  5. %iowait: Percentage of time when the given CPU (or all) was idle, during which there was a resource-intensive I/O operation scheduled on that CPU. A more detailed explanation (with examples) can be found here.
  6. %irq: Percentage of time spent servicing hardware interrupts.
  7. %soft: Same as %irq, but with software interrupts.
  8. %steal: Percentage of time spent in involuntary wait (steal or stolen time) when a virtual machine, as guest, is “winning” the hypervisor’s attention while competing for the CPU(s). This value should be kept as small as possible. A high value in this field means the virtual machine is stalling – or soon will be.
  9. %guest: Percentage of time spent running a virtual processor.
  10. %idle: percentage of time when CPU(s) were not executing any tasks. If you observe a low value in this column, that is an indication of the system being placed under a heavy load. In that case, you will need to take a closer look at the process list, as we will discuss in a minute, to determine what is causing it.

Pentru a pune locul procesorului sub o încărcare destul de mare, executați următoarele comenzi și apoi executați mpstat (după cum se indică) într-un terminal separat:

# dd if=/dev/zero of=test.iso bs=1G count=1
# mpstat -u -P 0 2 3
# ping -f localhost # Interrupt with Ctrl + C after mpstat below completes
# mpstat -u -P 0 2 3

În cele din urmă, comparați cu rezultatul mpstat în circumstanțe "normale":

După cum puteți vedea în imaginea de mai sus, CPU 0 a fost încărcat foarte greu în primele două exemple, după cum indică coloana % idle .

În următoarea secțiune vom discuta despre modul de identificare a acestor procese înfometați de resurse, modul de obținere a mai multor informații despre ele și modul de luare a măsurilor adecvate.

Raportarea proceselor Linux

Pentru a lista procesele care le sortează după utilizarea CPU-ului, vom folosi comanda ps binecunoscuta cu -eo (pentru a selecta toate procesele cu formatul definit de utilizator) și --sort (pentru a specifica o ordine personalizată de sortare), cum ar fi:

# ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu

Comanda de mai sus va afișa PID , PPID , comanda asociată procesului și procentajul de utilizare CPU și RAM ordonate după procentajul de utilizare CPU în ordine descrescătoare . Când este executat în timpul creării fișierului .iso , iată primele câteva linii ale ieșirii:

După ce am identificat un proces de interes (cum ar fi cel cu PID = 2822 ), putem naviga la /proc/PID /code> în acest caz) și faceți o înregistrare în director.

Acest director este în cazul în care mai multe fișiere și subdirectoare cu informații detaliate despre acest proces sunt păstrate în timpul funcționării.

  1. /proc/2822/io contains IO statistics for the process (number of characters and bytes read and written, among others, during IO operations).
  2. /proc/2822/attr/current shows the current SELinux security attributes of the process.
  3. /proc/2822/cgroup describes the control groups (cgroups for short) to which the process belongs if the CONFIG_CGROUPS kernel configuration option is enabled, which you can verify with:
# cat /boot/config-$(uname -r) | grep -i cgroups

Dacă opțiunea este activată, ar trebui să vedeți:

CONFIG_CGROUPS=y

Utilizând cgroups puteți gestiona cantitatea de utilizare a resurselor permise pe bază de proces, așa cum este explicat în capitolele 1 până la 4 din Ghidul de management al resurselor Red Hat Enterprise Linux 7, în Capitolul 9 al analizei sistemului openSUSE și Ghidul de reglare și în secțiunea Grupuri de control a documentației Ubuntu 14.04 Server.

/proc/2822/fd este un director care conține o legătură simbolică pentru fiecare descriptor de fișier pe care procesul a deschis-o. Următoarea imagine afișează aceste informații pentru procesul care a fost pornit în tty1 (primul terminal) pentru a crea imaginea .iso :

Imaginea de mai sus arată stdin (descriptor de fișier 0 ), stdout > /dev/zero , /root/test.iso (descriptorul fișierului 2 >/dev/tty1 , respectiv.

Mai multe informații despre /proc pot fi găsite în "Sistemul de fișiere /proc " păstrat și întreținut de Kernel.org și în Manualul programatorului Linux.

Setarea limitelor de resurse pe baza bazată pe utilizator în Linux

Dacă nu sunteți atent și permiteți unui utilizator să ruleze un număr nelimitat de procese, este posibil să vă confruntați în cele din urmă cu o închidere neașteptată a sistemului sau să fiți blocați deoarece sistemul intră într-o stare inutilizabilă. Pentru a preveni acest lucru, ar trebui să plasați o limită a numărului de procese pe care le pot începe utilizatorii.

Pentru aceasta, editați /etc/security/limits.conf și adăugați următoarea linie în partea de jos a fișierului pentru a seta limita:

*   	hard	nproc   10

Primul câmp poate fi folosit pentru a indica fie un utilizator, un grup, fie toți (*) , în timp ce cel de-al doilea câmp impune o limită dificilă a numărului procesului (nproc) 10 . Pentru a aplica modificări, este suficient să vă deconectați și să reveniți.

Astfel, să vedem ce se întâmplă dacă un anumit utilizator, altul decât rădăcina (fie unul legitim sau nu) încearcă să pornească o bombă furculiță. Dacă nu am fi implementat limite, aceasta ar lansa inițial două instanțe ale unei funcții și apoi duplicarea fiecăruia într-o buclă neîncetată. Astfel, ar aduce în cele din urmă sistemul dvs. într-un crawl.

Cu toate acestea, cu restricția de mai sus, bomba furcii nu reușește, dar utilizatorul va mai fi blocat până când administratorul de sistem nu va ucide procesul asociat cu acesta:

roșu

Linux Alte instrumente de management al proceselor

În plus față de instrumentele discutate anterior, un administrator de sistem poate avea de asemenea nevoie să:

a) Modificați prioritatea de execuție (utilizarea resurselor de sistem) a unui proces folosind renice . Acest lucru înseamnă că kernelul va aloca mai mult sau mai puțin resurse sistemului la proces pe baza priorității atribuite (un număr cunoscut ca " niceness " într-un interval de la -20 19 ).

Cu cât valoarea este mai mică, cu atât este mai mare prioritatea de execuție. Utilizatorii obișnuiți (cu excepția celor de la root) pot modifica nicidecum proprietățile proceselor pe care le dețin la o valoare mai mare (adică o prioritate de execuție mai mică), în timp ce root poate modifica această valoare pentru orice proces și poate crește sau micșora.

Sintaxa de bază a renicei este după cum urmează:

# renice [-n] <new priority> <UID, GID, PGID, or empty> identifier

Dacă argumentul după noua valoare de prioritate nu este prezent (gol), este setat la PID în mod implicit. În acest caz, excelența procesului cu PID = identificator este setată la & .

b) întrerupe executarea normală a unui proces atunci când este necesar. Acest lucru este cunoscut sub numele de "uciderea" procesului. Sub capota, aceasta înseamnă trimiterea procesului unui semnal pentru a termina executarea corectă și pentru a elibera toate resursele folosite într-o manieră ordonată.

Pentru a ucide un proces, folosiți comanda kill după cum urmează:

# kill PID

Alternativ, puteți folosi pkill pentru a termina toate procesele unui proprietar dat (- u) sau un proprietar de grup (- G) sau chiar acele procese care au un PPID în comun (- P) . Aceste opțiuni pot fi urmate de reprezentarea numerică sau de numele real ca identificator:

# pkill [options] identifier

De exemplu,

# pkill -G 1000

va ucide toate procesele deținute de grup cu GID = 1000 .

Și,

# pkill -P 4993 

va ucide toate procesele ale căror PPID este 4993 .

Înainte de a rula o pkill , este o idee bună să testați rezultatele mai întâi cu pgrep , folosind, de asemenea, opțiunea -l numele proceselor. Ea are aceleași opțiuni, dar returnează doar PID-urile proceselor (fără a mai întreprinde acțiuni) care ar fi ucise dacă se utilizează pkill .

# pgrep -l -u gacanepa

Acest lucru este ilustrat în următoarea imagine:

rezumat

În acest articol am analizat câteva moduri de a monitoriza utilizarea resurselor pentru a verifica integritatea și disponibilitatea componentelor hardware și software critice într-un sistem Linux.

De asemenea, am învățat cum să luăm măsurile potrivite (fie prin ajustarea priorității de execuție a unui anumit proces, fie prin încheierea acestuia) în condiții neobișnuite.

Sperăm că conceptele explicate în acest tutorial au fost de ajutor. Dacă aveți întrebări sau comentarii, nu ezitați să ne contactați folosind formularul de contact de mai jos.

Toate drepturile rezervate. © Linux-Console.net • 2019-2020