LFCS: stebėkite „Linux“ procesų išteklių naudojimą ir nustatykite procesų ribas pagal vartotoją - 14 dalis


Dėl naujausių LFCS sertifikavimo egzamino tikslų, įsigaliojusių nuo 2016 m. Vasario 2 d., Pakeitimų, reikalingus straipsnius taip pat pridedame prie LFCE serijos.

Kiekvienas „Linux“ sistemos administratorius turi žinoti, kaip patikrinti aparatūros, išteklių ir pagrindinių procesų vientisumą ir prieinamumą. Be to, išteklių apribojimų nustatymas kiekvienam vartotojui taip pat turi būti jo/jos įgūdžių rinkinio dalis.

Šiame straipsnyje mes išnagrinėsime keletą būdų, kaip užtikrinti, kad sistema ir aparatinė, ir programinė įranga elgsis teisingai, kad išvengtumėte galimų problemų, kurios gali sukelti netikėtą gamybos prastovą ir pinigų praradimą.

„Linux“ ataskaitų teikimo procesorių statistika

Naudodami „mpstat“ galite peržiūrėti kiekvieno procesoriaus veiklas atskirai arba visos sistemos veikimą tiek kaip vienkartinę momentinę nuotrauką, tiek dinamiškai.

Norėdami naudoti šį įrankį, turėsite įdiegti „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]

Sužinokite daugiau apie „sysstat“ ir jo komunalines paslaugas „Linux“ sistemoje „Learn Sysstat and Its Utilities mpstat“, „pidstat“, „iostat“ ir „sar“

Įdiegę „mpstat“, naudokite jį procesorių statistikos ataskaitoms generuoti.

Norėdami rodyti 3 visuotines procesoriaus naudojimo ataskaitas ( -u ) visiems procesoriams (kaip nurodyta -P ALL) 2 sekundžių intervalu, atlikite šiuos veiksmus:

# 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

Norėdami peržiūrėti tą pačią konkretaus procesoriaus statistiką (0 pavyzdys šiame pavyzdyje), naudokite:

# 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

Pirmiau nurodytų komandų išvestis rodo šiuos stulpelius:

  1. CPU : procesoriaus numeris kaip sveikas skaičius arba žodis all kaip visų procesorių vidurkis.
  2. % usr : procesoriaus naudojimo procentas, vykdant vartotojo lygio programas.
  3. % nice : tas pats kaip % usr , bet su pirmenybe.
  4. % sys : procesoriaus naudojimo procentas, įvykęs vykdant branduolio programas. Tai neapima laiko, praleisto dirbant su pertraukimais arba tvarkant aparatinę įrangą.
  5. % iowait : procentas laiko, kai nurodytas procesorius (arba visas) neveikė, per kurį tame procesoriuje buvo suplanuota daug išteklių reikalaujanti įvesties/išvesties operacija. Išsamesnį paaiškinimą (su pavyzdžiais) galite rasti čia.
  6. % irq : aparatinės įrangos priežiūrai skirto laiko procentinė dalis.
  7. % soft : tas pats, kas % irq , bet su programinės įrangos pertraukimais.
  8. % steal : procentas laiko, praleisto nevalingu laukimu (vagystės ar pavogimo laikas), kai virtuali mašina, būdama svečias, „užkariauja“ hipervizoriaus dėmesį konkuruodama dėl procesoriaus (-ų). Ši vertė turėtų būti kuo mažesnė. Didelė šio lauko vertė reiškia, kad virtuali mašina stringa - arba netrukus bus.
  9. % guest : virtualaus procesoriaus paleidimo laiko procentinė dalis.
  10. % idle : laiko procentas, kai procesorius neatliko jokių užduočių. Jei šiame stulpelyje pastebite mažą vertę, tai rodo, kad sistema patiria didelę apkrovą. Tokiu atveju turėsite atidžiau pažvelgti į procesų sąrašą, kurį aptarsime per minutę, kad nustatytume, kas jį sukelia.

Norėdami įdėti procesorių į šiek tiek didelę apkrovą, vykdykite šias komandas ir tada vykdykite mpstat (kaip nurodyta) atskirame terminale:

# 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

Galiausiai palyginkite su „mpstat“ išvestimi „įprastomis“ aplinkybėmis:

Kaip matote aukščiau esančiame paveikslėlyje, per pirmuosius du pavyzdžius 0 procesorius buvo labai apkrautas, kaip nurodyta stulpelyje % idle .

Kitame skyriuje aptarsime, kaip nustatyti šiuos ištroškusius procesus, kaip gauti daugiau informacijos apie juos ir kaip tinkamai elgtis.

Pranešimas apie „Linux“ procesus

Norėdami išvardyti procesus, rūšiuodami juos pagal procesoriaus naudojimą, naudosime gerai žinomą komandą ps su -eo (norėdami pasirinkti visus procesus su vartotojo nustatytu formatu) ir --sort (nurodyti pasirinktinę rūšiavimo tvarką) parinktys, pvz .:

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

Pirmiau nurodyta komanda rodys tik PID , PPID , su procesu susietą komandą ir procesoriaus bei RAM naudojimo procentą, surūšiuotą pagal procesoriaus naudojimo procentą mažėjančia tvarka . Kai vykdoma kuriant .iso failą, pateikiamos pirmosios išvesties eilutės:

Nustatę dominantį procesą (pvz., Procesą su PID = 2822 ), galime pereiti prie /proc/PID (/proc/2822 (šiuo atveju) ir atlikite katalogų sąrašą.

Šiame kataloge yra keli failai ir pakatalogiai, kuriuose pateikiama išsami informacija apie šį procesą, kol jis veikia.

  1. /proc/2822/io yra proceso IO statistika (be kita ko, IO operacijų metu perskaitytų ir parašytų simbolių ir baitų skaičius).
  2. /proc/2822/attr/current rodo dabartinius proceso SELinux saugos atributus.
  3. /proc/2822/cgroup apibūdina valdymo grupes (trumpai - „cgroups“), kurioms priklauso šis procesas, jei įgalinta branduolio konfigūravimo parinktis CONFIG_CGROUPS, kurią galite patvirtinti:

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

Jei parinktis įgalinta, turėtumėte pamatyti:

CONFIG_CGROUPS=y

Naudodami cgroups , galite valdyti leistiną išteklių naudojimą kiekvienam procesui, kaip paaiškinta „Ubuntu 14.04 Server“ dokumentacijos skyriaus „Valdymo grupės“ 1–4 skyriuose.

/proc/2822/fd yra katalogas, kuriame yra viena simbolinė nuoroda kiekvienam proceso atidarytam failo deskriptoriui. Šiame paveikslėlyje pateikiama ši informacija apie procesą, kuris buvo pradėtas tty1 (pirmasis terminalas) norint sukurti .iso vaizdą:

Aukščiau pateiktame paveikslėlyje parodyta, kad stdin (failo deskriptorius 0), stdout (failo deskriptorius 1) ir stderr (failo deskriptorius 2) yra susieti su/dev/zero, /root/test.iso ir/dev/tty1.

Daugiau informacijos apie /proc rasite dokumente „The /proc filesystem“, kurį saugo ir prižiūri Kernel.org, bei „Linux“ programuotojo vadove.

Išteklių ribų nustatymas pagal „Linux“ vartotojui

Jei nesate atsargūs ir leidžiate bet kuriam vartotojui vykdyti neribotą skaičių procesų, galų gale galite netikėtai išjungti sistemą arba būti užrakinta sistemai perėjus į netinkamą būseną. Norėdami to išvengti, turėtumėte apriboti procesų, kuriuos vartotojai gali pradėti, skaičių.

Norėdami tai padaryti, redaguokite /etc/security/limits.conf ir pridėkite šią eilutę failo apačioje, kad nustatytumėte ribą:

*   	hard	nproc   10

Pirmasis laukas gali būti naudojamas vartotojui, grupei arba visiems jiems nurodyti (*) , o antrasis laukas nustato griežtą proceso skaičiaus (nproc) ribą iki 10. taikyti pakeitimus, pakanka atsijungti ir vėl prisijungti.

Taigi pažiūrėkime, kas atsitiks, jei tam tikras vartotojas, išskyrus šakninį (teisėtą, ar ne), bandys paleisti šakinį šakinį bombą. Jei nebūtume įdiegę ribų, tai iš pradžių paleistų du funkcijos egzempliorius ir po to kiekvieną iš jų dubliuotų nesibaigiančioje cikle. Taigi galų gale jūsų sistema bus nuskaityta.

Tačiau esant pirmiau nurodytam apribojimui, šakės bomba nepavyksta, tačiau vartotojas vis tiek bus užrakintas, kol sistemos administratorius užmuš su juo susijusį procesą:

PATARIMAS: Kiti galimi „ulimit“ apribojimai yra užfiksuoti faile limits.conf .

Kiti „Linux“ procesų valdymo įrankiai

Be anksčiau aptartų įrankių, sistemos administratoriui taip pat gali tekti:

a) Pakeiskite proceso vykdymo prioritetą (sistemos išteklių naudojimą) naudodami renice. Tai reiškia, kad branduolys paskirstys daugiau ar mažiau sistemos išteklių procesui, atsižvelgdamas į priskirtą prioritetą (skaičius, paprastai žinomas kaip „gražumas“, diapazone nuo -20 iki 19 ).

Kuo mažesnė vertė, tuo didesnis vykdymo prioritetas. Nuolatiniai vartotojai (išskyrus root) gali modifikuoti tik jiems priklausančių procesų gražumą į didesnę vertę (tai reiškia mažesnį vykdymo prioritetą), o root gali pakeisti šią reikšmę bet kuriam procesui ir gali ją padidinti arba sumažinti.

Pagrindinė renice sintaksė yra tokia:

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

Jei po naujos prioriteto vertės argumento nėra (tuščias), jis pagal numatytuosius nustatymus yra nustatytas kaip PID. Tokiu atveju proceso su PID = identifikatoriumi gražumas nustatomas į .

b) Jei reikia, pertraukite įprastą proceso vykdymą. Tai paprastai vadinama proceso „nužudymu“. Po gaubtu tai reiškia, kad reikia siųsti procesui signalą, kad jis tinkamai užbaigtų ir tvarkingai išlaisvintų visus panaudotus išteklius.

Norėdami užmušti procesą, naudokite komandą nužudyti taip:

# kill PID

Arba galite naudoti „pkill“, norėdami nutraukti visus nurodyto savininko (-u) arba grupės savininko (-G) procesus ar net tuos procesus, kurie turi PPID bendras (-P) . Šias parinktis gali žymėti skaitmeninis atvaizdas arba tikrasis vardas kaip identifikatorius:

# pkill [options] identifier

Pavyzdžiui,

# pkill -G 1000

užmuš visus procesus, priklausančius grupei, kurios GID = 1000.

Ir,

# pkill -P 4993 

sunaikins visus procesus, kurių PPID yra 4993.

Prieš paleisdami „pkill“, pirmiausia verta išbandyti rezultatus naudodami „pgrep“, galbūt naudodami parinktį -l ir nurodydami procesų pavadinimus. Tam reikia tų pačių parinkčių, tačiau pateikiami tik procesų PID (neatliekant jokių tolesnių veiksmų), kurie būtų užmušti, jei būtų naudojamas pkill.

# pgrep -l -u gacanepa

Tai pavaizduota kitame paveikslėlyje:

Santrauka

Šiame straipsnyje mes ištyrėme keletą būdų stebėti išteklių naudojimą, kad patikrintume svarbiausių aparatinės ir programinės įrangos komponentų vientisumą ir prieinamumą „Linux“ sistemoje.

Mes taip pat sužinojome, kaip imtis tinkamų veiksmų (arba koreguojant tam tikro proceso vykdymo prioritetą, arba jį nutraukiant) neįprastomis aplinkybėmis.

Tikimės, kad šioje pamokoje paaiškintos sąvokos buvo naudingos. Jei turite klausimų ar komentarų, susisiekite su mumis naudodamiesi žemiau esančia kontaktine forma.