LFCS: jälgige Linuxi protsesside ressursside kasutamist ja määrake protsessipiirangud kasutaja kohta - osa 14


Tänu hiljutistele muudatustele LFCSi sertifitseerimise eksami eesmärkides, mis kehtivad alates 2. veebruarist 2016, lisame vajalikud artiklid ka LFCE seeriasse.

Iga Linuxi süsteemiadministraator peab teadma, kuidas kontrollida riistvara, ressursside ja põhiprotsesside terviklikkust ja kättesaadavust. Lisaks peab kasutaja oskuste hulka kuuluma ka ressursside piirmäärade määramine kasutaja kohta.

Selles artiklis uurime mõningaid viise, kuidas tagada nii riistvara kui ka tarkvara korrektne käitumine, et vältida võimalikke probleeme, mis võivad põhjustada ootamatuid tootmisseisakuid ja rahakadu.

Linuxi aruandlusprotsessorite statistika

Mpstatiga saate vaadata iga protsessori tegevusi eraldi või kogu süsteemi nii ühekordse hetkepildina kui ka dünaamiliselt.

Selle tööriista kasutamiseks peate installima 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]

Lisateavet sysstati ja selle utiliitide kohta leiate lehelt Learn Sysstat and Its Utilities mpstat, pidstat, iostat ja sar Linuxis

Kui olete mpstat installinud, kasutage seda protsessorite statistika aruannete loomiseks.

Kõigi keskprotsessorite 3 üldise aruande ( -u ) (nagu tähistab -P ALL) kuvamiseks 2-sekundilise intervalliga tehke järgmist:

# mpstat -P ALL -u 2 3
Linux 3.19.0-32-generic (linux-console.net) 	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

Konkreetse protsessori sama statistika vaatamiseks (järgmises näites protsessor 0) kasutage järgmist:

# mpstat -P 0 -u 2 3
Linux 3.19.0-32-generic (linux-console.net) 	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

Ülaltoodud käskude väljund näitab neid veerge:

  1. CPU : protsessori number täisarvuna või sõna kõik kõigi protsessorite keskmisena.
  2. % usr : protsessori kasutamise protsent kasutaja tasemel rakenduste käitamise ajal.
  3. % nice : sama mis % usr , kuid kena prioriteediga.
  4. % sys : protsessori kasutamise protsent, mis ilmnes tuumarakenduste käivitamisel. See ei hõlma aega, mis kulub katkestustega tegelemisele või riistvara käitlemisele.
  5. % iowait : protsent ajast, mil antud protsessor (või kõik) oli jõude, mille jooksul sellele protsessorile oli planeeritud ressursimahukas sisend-/väljundoperatsioon. Täpsema selgituse (koos näidetega) leiate siit.
  6. % irq : riistvara katkestuste hooldamiseks kulutatud aja protsent.
  7. % soft : sama mis % irq , kuid tarkvara katkestustega.
  8. % steal : tahtmatus ootuses (varastatud või varastatud aeg) veedetud aja protsent, kui virtuaalne masin külalisena\"võidab \" hüpervisori tähelepanu samal ajal kui protsessor (id) eest võistleb . See väärtus tuleks hoida nii väike kui võimalik. Kõrge väärtus sellel väljal tähendab, et virtuaalne masin seiskub - või peagi.
  9. % guest : virtuaalse protsessori käitamiseks kulutatud aja protsent.
  10. % idle : protsent ajast, kui protsessor (id) ei täitnud ühtegi toimingut. Kui täheldate selles veerus madalat väärtust, näitab see süsteemi suurt koormust. Sellisel juhul peate protsesside loendit lähemalt uurima, nagu me arutame minutiga, et teha kindlaks, mis seda põhjustab.

Protsessori asetamiseks mõnevõrra suurele koormusele käivitage järgmised käsud ja käivitage seejärel mpstat (nagu näidatud) eraldi terminalis:

# 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

Lõpuks võrrelge mpstat väljundiga\"normaalsetes" tingimustes:

Nagu ülaltoodud pildil näha, oli protsessor 0 kahe esimese näite ajal suure koormuse all, nagu näitab veerg % idle .

Järgmises osas arutame, kuidas neid ressursinälga protsesse tuvastada, kuidas nende kohta rohkem teavet saada ja kuidas asjakohaseid meetmeid võtta.

Aruandlus Linuxi protsessidest

Protsesside loetlemiseks, sortides need protsessori kasutamise järgi, kasutame hästi tuntud käsku ps koos koodiga -eo (kõigi kasutaja määratud vormingus protsesside valimiseks) ja --sort (kohandatud sortimiskorra määramiseks) valikud, näiteks:

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

Ülaltoodud käsk kuvab ainult PID , PPID , protsessiga seotud käsu ning protsessori ja RAM-i kasutamise protsendi, mis on järjestatud protsessori kasutamise protsendi järgi kahanevas järjekorras . Kui see käivitatakse .iso-faili loomise ajal, on siin väljundi esimesed read:

Kui oleme tuvastanud huvipakkuva protsessi (näiteks protsess, millel on PID = 2822 ), saame navigeerida saidile /proc/PID (/proc/2822 (sel juhul) ja tehke kataloogide loend.

Selles kataloogis hoitakse selle töötamise ajal mitu faili ja alamkataloogi, millel on üksikasjalik teave selle konkreetse protsessi kohta.

  1. /proc/2822/io sisaldab protsessi IO statistikat (muu hulgas IO toimingute käigus loetud ja kirjutatud märkide ja baitide arv).
  2. /proc/2822/attr/current näitab protsessi praeguseid SELinuksi turbeatribuute.
  3. /proc/2822/cgroup kirjeldab juhtgruppe (lühidalt cgroups), kuhu protsess kuulub, kui on lubatud tuuma seadistamise suvand CONFIG_CGROUPS, mida saate kontrollida:

# cat /boot/config-$(uname -r) | grep -i cgroups

Kui valik on lubatud, peaksite nägema järgmist.

CONFIG_CGROUPS=y

Kasutades cgroups , saate hallata lubatud ressursikasutuse mahtu protsesside kaupa, nagu on selgitatud Ubuntu 14.04 Serveri dokumentatsiooni jaotise Juhtgrupid jaotistes 1 kuni 4.

/proc/2822/fd on kataloog, mis sisaldab ühte sümboolset linki iga avatud faili kirjeldaja jaoks. Järgmine pilt näitab seda teavet protsessi kohta, mida alustati tty1-s (esimene terminal) .iso-pildi loomiseks:

Ülaltoodud pilt näitab, et stdin (faili deskriptor 0), stdout (faili deskriptor 1) ja stderr (faili deskriptor 2) on kaardistatud vastavalt/dev/zero,/root/test.iso ja/dev/tty1.

Lisateavet /proc kohta leiate dokumendist\"The /proc filesystem", mida haldab ja haldab Kernel.org, ning Linuxi programmeerija käsiraamatust.

Ressursside piirangute määramine kasutaja kohta Linuxis

Kui te pole ettevaatlik ja lubate ühelgi kasutajal käivitada piiramatu arvu protsesse, võite lõpuks kogeda süsteemi ootamatut seiskamist või lukustuda, kui süsteem siseneb kasutamiskõlbmatusse olekusse. Selle vältimiseks peaksite piirama kasutajate käivitatavate protsesside arvu.

Selleks muutke faili /etc/security/limits.conf ja lisage limiidi määramiseks faili lõppu järgmine rida:

*   	hard	nproc   10

Esimest välja saab kasutada kas kasutaja, rühma või kõigi nende tähistamiseks (*) , teisel väljal aga kehtestatakse protsesside (nproc) arvule range piirang kuni 10. muudatuste rakendamiseks piisab välja logimisest ja uuesti sisselogimisest.

Vaatame siis, mis juhtub, kui mõni kindel kasutaja, välja arvatud root (kas seaduslik või mitte), üritab käivitada kahvliharuga pommi. Kui me poleks piiranguid rakendanud, käivitaks see algul kaks funktsiooni eksemplari ja dubleeriks seejärel need kõik lõpmatus silmus. Seega viiks see lõpuks teie süsteemi roomamiseni.

Kui ülaltoodud piirang kehtib, ei saa kahvlipomm edukalt toimida, kuid kasutaja lukustatakse endiselt, kuni süsteemiadministraator sellega seotud protsessi tapab:

NÕUANNE: muud võimalikud piirangud, mille on võimaldanud saavutada ulimit, on dokumenteeritud failis limits.conf .

Linuxi muud protsesside haldamise tööriistad

Lisaks eelnevalt käsitletud tööriistadele võib süsteemiadministraator vajada ka järgmist.

a) Muutke renice abil protsessi täitmise prioriteeti (süsteemiressursside kasutamine). See tähendab, et kern eraldab protsessile rohkem või vähem süsteemiressursse määratud prioriteedi alusel (arv, mida tavaliselt nimetatakse\"kenaks» vahemikus -20 kuni 19 ).

Mida väiksem on väärtus, seda suurem on täitmise prioriteet. Tavakasutajad (välja arvatud juur) saavad modifitseerida ainult nende omanduses olevate protsesside toredust kõrgema väärtusega (see tähendab madalamat täitmisprioriteeti), root aga saab seda väärtust muuta mis tahes protsessi jaoks ning võib seda suurendada või vähendada.

Renice'i põhisüntaks on järgmine:

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

Kui argumenti pärast uut prioriteediväärtust pole (tühi), on see vaikimisi PID. Sellisel juhul on PID = identifikaatoriga protsessi kenuseks seatud .

b) Vajadusel katkestage protsessi tavapärane teostamine. Seda tuntakse tavaliselt kui protsessi "tapmist". See tähendab kapoti all signaali saatmist protsessi lõpuleviimiseks ja kõigi kasutatud ressursside korrektseks vabastamiseks.

Protsessi tapmiseks kasutage käsku kill järgmiselt:

# kill PID

Teise võimalusena saate pkilli abil lõpetada kõik antud omaniku (-u) või rühmaomaniku (-G) protsessid või isegi protsessid, millel on PPID ühine (-P) . Nendele valikutele võib järgneda numbriline esitus või tegelik nimi identifikaatorina:

# pkill [options] identifier

Näiteks,

# pkill -G 1000

tapab kõik protsessid, mis kuuluvad grupile GID = 1000.

Ja

# pkill -P 4993 

tapab kõik protsessid, mille PPID on 4993.

Enne pkilli käivitamist on hea kõigepealt tulemusi testida pgrepiga, kasutades protsesside nimede loendamiseks ka valikut -l . See võtab samad valikud, kuid tagastab ainult protsesside PID-d (ilma täiendavate toiminguteta), mis tapetakse pkilli kasutamise korral.

# pgrep -l -u gacanepa

Seda illustreerib järgmine pilt:

Kokkuvõte

Selles artiklis oleme uurinud mõningaid võimalusi ressursikasutuse jälgimiseks, et kontrollida Linuxi kriitiliste riist- ja tarkvarakomponentide terviklikkust ja kättesaadavust.

Samuti oleme õppinud, kuidas ebatavalistel asjaoludel asjakohaseid toiminguid teha (kas korrigeerides antud protsessi täitmise prioriteeti või lõpetades).

Loodame, et selles õpetuses selgitatud mõistetest on abi olnud. Kui teil on küsimusi või kommentaare, võtke meiega ühendust, kasutades allolevat kontaktivormi.