LFCS: Spremljanje uporabe procesov Linuxa in nastavitev omejitev postopkov na osnovi posameznega uporabnika - 14. del


Zaradi nedavnih sprememb ciljev certifikacijskega izpita LFCS, ki so začeli veljati 2. februarja 2016, v serijo LFCE dodajamo tudi potrebne članke.

Vsak sistemski skrbnik Linuxa mora vedeti, kako preveriti celovitost in razpoložljivost strojne opreme, virov in ključnih procesov. Poleg tega mora biti tudi določanje omejitev virov na uporabnika del njegovega nabora spretnosti.

V tem članku bomo preučili nekaj načinov, kako zagotoviti, da se sistem, tako strojna kot programska oprema, obnaša pravilno, da se izognemo morebitnim težavam, ki lahko povzročijo nepričakovane zastoje proizvodnje in izgubo denarja.

Statistika procesorjev poročanja v Linuxu

Z mpstat si lahko ogledate dejavnosti za vsak procesor posebej ali sistem kot celoto, tako kot enkratni posnetek bodisi dinamično.

Če želite uporabljati to orodje, boste morali namestiti 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]

Preberite več o sysstatu in njegovih pomožnih programih na Learn Sysstat in njegovih pripomočkih mpstat, pidstat, iostat in sar v Linuxu

Ko ste namestili mpstat, ga uporabite za ustvarjanje poročil o statistiki procesorjev.

Če želite prikazati 3 globalna poročila o uporabi CPU ( -u ) za vse CPU (kot je označeno z -P ALL) v 2-sekundnem intervalu, naredite naslednje:

# 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

Če si želite ogledati isto statistiko za določen CPU (CPU 0 v naslednjem primeru), uporabite:

# 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

Izhod zgornjih ukazov prikazuje te stolpce:

  1. CPU : številka procesorja kot celo število ali beseda all kot povprečje za vse procesorje.
  2. % usr : Odstotek izkoriščenosti CPU med izvajanjem aplikacij na ravni uporabnika.
  3. % nice : Enako kot % usr , vendar z lepo prednostjo.
  4. % sys : Odstotek izkoriščenosti CPU, ki se je zgodil med izvajanjem jedrnih aplikacij. To ne vključuje časa, porabljenega za prekinitve ali ravnanje s strojno opremo.
  5. % iowait : Odstotek časa, ko je bil dani CPU (ali celoten) v mirovanju, v katerem je bila na tem CPU načrtovana I/O operacija, ki zahteva veliko virov. Podrobnejšo razlago (s primeri) najdete tukaj.
  6. % irq : Odstotek časa, porabljenega za servisiranje strojnih prekinitev.
  7. % soft : enako kot % irq , vendar s programskimi prekinitvami.
  8. % kraje : Odstotek časa, porabljenega v nehotenem čakanju (ukraden ali ukraden čas), ko navidezni stroj kot gost\"pridobiva \" pozornost hipervizorja med tekmovanjem za CPU/e . To vrednost naj bo čim manjša. Visoka vrednost v tem polju pomeni, da se navidezni stroj ustavi - ali pa bo kmalu.
  9. % gost : Odstotek časa, porabljenega za zagon navideznega procesorja.
  10. % nedejavnost : odstotek časa, ko CPE niso izvajali nobenih nalog. Če v tem stolpcu opazite nizko vrednost, je to znak, da je sistem pod velikim bremenom. V tem primeru boste morali podrobneje preučiti seznam postopkov, o katerem bomo razpravljali čez minuto, da ugotovimo, kaj povzroča to.

Če želite procesor postaviti pod nekoliko veliko obremenitev, zaženite naslednje ukaze in nato v ločenem terminalu izvedite mpstat (kot je navedeno):

# 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

Na koncu primerjajte z izhodom mpstata v\"običajnih" okoliščinah:

Kot lahko vidite na zgornji sliki, je bil CPU 0 v prvih dveh primerih močno obremenjen, kot kaže stolpec % idle .

V naslednjem poglavju bomo razpravljali o tem, kako prepoznati te procese, ki zahtevajo vire, kako pridobiti več informacij o njih in kako ustrezno ukrepati.

Poročanje o Linuxovih procesih

Za seznam procesov, ki jih razvrščamo po uporabi CPU, bomo uporabili dobro znani ukaz ps z -eo (za izbiro vseh procesov z uporabniško določeno obliko) in --sort (da določite vrstni red razvrščanja po meri), na primer tako:

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

Zgornji ukaz bo prikazal samo PID , PPID , ukaz, povezan s postopkom, in odstotek porabe CPU in RAM-a, razvrščen glede na odstotek uporabe CPU v padajočem vrstnem redu . Tukaj je prvih nekaj vrstic izhoda, ki se izvede med ustvarjanjem datoteke .iso:

Ko smo identificirali proces, ki nas zanima (na primer postopek z PID = 2822 ), lahko poiščemo /proc/PID (/proc/2822 v tem primeru) in naredite seznam imenikov.

V tem imeniku se med izvajanjem hrani več datotek in podimenikov s podrobnimi informacijami o tem postopku.

  1. /proc/2822/io vsebuje statistiko IO za postopek (število znakov in bajtov, med drugim prebranih in zapisanih med operacijami IO).
  2. /proc/2822/attr/current prikazuje trenutne varnostne atribute procesa SELinux.
  3. /proc/2822/cgroup opisuje nadzorne skupine (na kratko cgroups), ki jim postopek pripada, če je omogočena možnost konfiguracije jedra CONFIG_CGROUPS, kar lahko preverite z:

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

Če je možnost omogočena, bi morali videti:

CONFIG_CGROUPS=y

Z cgroups lahko upravljate količino dovoljene porabe virov na posamezen postopek, kot je razloženo v poglavjih od 1 do 4 oddelka Nadzorne skupine v dokumentaciji strežnika Ubuntu 14.04.

/proc/2822/fd je imenik, ki vsebuje eno simbolno povezavo za vsak deskriptor datoteke, ki jo je postopek odprl. Naslednja slika prikazuje te informacije za postopek, ki se je začel v tty1 (prvi terminal) za ustvarjanje slike .iso:

Zgornja slika prikazuje, da so stdin (deskriptor datoteke 0), stdout (deskriptor datoteke 1) in stderr (deskriptor datoteke 2) preslikani v/dev/zero, /root/test.iso in/dev/tty1.

Več informacij o /proc najdete v dokumentu\"Datotečni sistem /proc ", ki ga hrani in vzdržuje Kernel.org, in v priročniku za programerje za Linux.

Nastavitev omejitev virov na osnovi posameznega uporabnika v Linuxu

Če niste previdni in dovolite, da kateri koli uporabnik izvaja neomejeno število procesov, lahko sčasoma pride do nepričakovane zaustavitve sistema ali pa ostane zaklenjen, ko sistem preide v neuporabno stanje. Da se to ne bi zgodilo, morate omejiti število procesov, ki jih lahko zaženejo uporabniki.

Če želite to narediti, uredite /etc/security/limits.conf in dodajte naslednjo vrstico na dnu datoteke, da nastavite omejitev:

*   	hard	nproc   10

Prvo polje lahko uporabimo za označevanje uporabnika, skupine ali vseh (*) , drugo polje pa določa strogo omejitev števila postopkov (nproc) na 10. uporabite spremembe, odjava in ponovna prijava je dovolj.

Poglejmo torej, kaj se zgodi, če določen uporabnik, ki ni korenski (bodisi zakonit ali ne), poskusi zagnati lupino z vilicami. Če ne bi uvedli omejitev, bi to sprva zagnalo dva primerka funkcije in nato podvojilo vsakega od njih v neskončni zanki. Tako bi sčasoma vaš sistem pripeljal do iskanja.

Vendar z veljavno zgornjo omejitvijo bomba z vilicami ne uspe, vendar bo uporabnik kljub temu zaklenjen, dokler skrbnik sistema ne ubije procesa, povezanega z njim:

NASVET: Druge možne omejitve, ki jih omogoča ulimit, so dokumentirane v datoteki limit.conf .

Linux druga orodja za upravljanje procesov

Poleg predhodno obravnavanih orodij bo sistemski skrbnik morda moral še:

a) Spremenite prednost izvedbe (uporaba sistemskih virov) procesa z uporabo renice. To pomeni, da bo jedro postopku dodelilo več ali manj sistemskih virov na podlagi dodeljene prioritete (številka, splošno znana kot\"lepota" v območju od -20 do 19 ).

Nižja kot je vrednost, večja je prednost izvedbe. Redni uporabniki (razen root) lahko spremenijo lepoto procesov, ki jih imajo v lasti, le na višjo vrednost (kar pomeni nižjo prednost izvedbe), medtem ko lahko root to vrednost spremeni za kateri koli postopek in jo lahko poveča ali zmanjša.

Osnovna sintaksa renice je naslednja:

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

Če argument za novo vrednostjo prednosti ni prisoten (prazen), je privzeto nastavljen na PID. V tem primeru je lepota postopka z identifikatorjem PID = nastavljena na .

b) Po potrebi prekini normalno izvajanje postopka. To je splošno znano kot "ubijanje" postopka. Pod pokrovom to pomeni, da se procesu pošlje signal, da se pravilno zaključi in pravilno porabi vse uporabljene vire.

Če želite ubiti postopek, uporabite ukaz kill na naslednji način:

# kill PID

Lahko pa uporabite pkill za zaključek vseh procesov določenega lastnika (-u) ali lastnika skupine (-G) ali celo tistih procesov, ki imajo PPID skupno (-P) . Tem možnostim lahko sledi številčna predstavitev ali dejansko ime kot identifikator:

# pkill [options] identifier

Na primer,

# pkill -G 1000

bo ubil vse procese v lasti skupine z GID = 1000.

In,

# pkill -P 4993 

bo ubil vse procese, katerih PPID je 4993.

Pred zagonom pkill-a je dobro, da rezultate najprej preizkusite s pgrep, morda tudi z uporabo možnosti -l , da navedete imena procesov. Izvaja enake možnosti, vendar vrne samo PID-je procesov (brez nadaljnjih ukrepov), ki bi bili ubiti, če bi uporabili pkill.

# pgrep -l -u gacanepa

To je prikazano na naslednji sliki:

Povzetek

V tem članku smo raziskali nekaj načinov za spremljanje porabe virov, da bi preverili celovitost in razpoložljivost kritičnih komponent strojne in programske opreme v sistemu Linux.

Naučili smo se tudi, kako v nenavadnih okoliščinah ustrezno ukrepati (bodisi s prilagoditvijo prioritete izvajanja določenega postopka bodisi s prekinitvijo).

Upamo, da so bili koncepti, razloženi v tej vadnici, koristni. Če imate kakršna koli vprašanja ali komentarje, nas prosimo kontaktirajte s spodnjim kontaktnim obrazcem.