LFCS: Tarkkaile Linux-prosessien resurssien käyttöä ja aseta prosessirajoitukset käyttäjäkohtaisesti - Osa 14


LFCS-sertifiointikokeisiin tehtyjen viimeaikaisten muutosten vuoksi, jotka tulivat voimaan 2. helmikuuta 2016, lisäämme tarvittavat artikkelit täällä julkaistuun LFCS-sarjaan. Valmistautuaksesi tähän kokeeseen, sinua kehotetaan käymään läpi myös LFCE-sarja.

Jokaisen Linux-järjestelmänvalvojan on osattava varmistaa laitteiston, resurssien ja avainprosessien eheys ja saatavuus. Lisäksi resurssirajojen asettamisen käyttäjäkohtaisesti tulee olla osa hänen osaamistaan.

Tässä artikkelissa tutkimme muutamia tapoja varmistaa, että järjestelmä sekä laitteisto että ohjelmisto toimivat oikein, jotta vältetään mahdolliset ongelmat, jotka voivat aiheuttaa odottamattomia tuotantokatkoksia ja rahan menetyksiä.

Linuxin raportointiprosessorien tilastot

mpstatin avulla voit tarkastella kunkin prosessorin toimintoja yksitellen tai järjestelmän kokonaisuutena, sekä kertaluonteisena tilannekuvana että dynaamisesti.

Jotta voit käyttää tätä työkalua, sinun on asennettava 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]

Lue lisää sysstatista ja sen apuohjelmista osoitteessa Learn Sysstat and Its Utilities mpstat, pidstat, iostat ja sar Linuxissa

Kun olet asentanut mpstatin, käytä sitä prosessorien tilastotietojen raporttien luomiseen.

Näytä 3 globaalia CPU-käyttöraporttia (-u) kaikille suorittimille (merkitty -P ALL) 2 sekunnin välein , tee:

mpstat -P ALL -u 2 3
Näytelähtö
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

Jos haluat tarkastella samoja tilastoja tietylle CPU:lle (CPU 0 seuraavassa esimerkissä), käytä:

mpstat -P 0 -u 2 3
Näytelähtö
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

Yllä olevien komentojen tulos näyttää nämä sarakkeet:

  1. CPU: Prosessorin numero kokonaislukuna tai sana kaikki kaikkien prosessorien keskiarvona.
  2. %usr: Prosenttiosuus suorittimen käyttöasteesta käyttäjätason sovellusten ajettaessa.
  3. %nice: Sama kuin %usr, mutta hyvällä prioriteetilla.
  4. %sys: Prosenttiosuus suorittimen käyttöasteesta, joka tapahtui suoritettaessa ydinsovelluksia. Tämä ei sisällä keskeytysten tai laitteiston käsittelyyn käytettyä aikaa.
  5. %iowait: Prosenttiosuus ajasta, jolloin tietty CPU (tai kaikki) oli käyttämättömänä ja jonka aikana kyseiselle suorittimelle oli ajoitettu resurssiintensiivinen I/O-toiminto. Tarkempi selitys (esimerkeineen) löytyy täältä.
  6. %irq: Prosenttiosuus ajasta, joka kuluu laitteistokatkosten huoltoon.
  7. %soft: Sama kuin %irq, mutta ohjelmiston keskeytyksillä.
  8. %steal: Prosenttiosuus ajasta, joka kuluu tahattomaan odotukseen (varastamiseen tai varasteluun), kun virtuaalikone vieraana "vyökkää" hypervisorin huomion kilpaillessaan CPU:ista. Tämä arvo tulee pitää mahdollisimman pienenä. Suuri arvo tässä kentässä tarkoittaa, että virtuaalikone pysähtyy – tai tulee pian.
  9. %guest: Prosenttiosuus ajasta, joka kuluu virtuaalisen prosessorin käyttämiseen.
  10. %idle: prosenttiosuus ajasta, jolloin suorittimet eivät suorittaneet tehtäviä. Jos huomaat alhaisen arvon tässä sarakkeessa, se on merkki siitä, että järjestelmä on raskaan kuormituksen alaisena. Siinä tapauksessa sinun on tarkasteltava lähemmin prosessiluetteloa, kuten keskustelemme minuutin kuluttua, määrittääksesi, mikä sen aiheuttaa.

Jos haluat asettaa prosessorin hieman korkealle kuormitukselle, suorita seuraavat komennot ja suorita sitten mpstat (kuten on osoitettu) erillisessä terminaalissa:

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

Vertaa lopuksi mpstat-tulostukseen "normaaleissa" olosuhteissa:

Kuten yllä olevasta kuvasta näet, CPU 0 oli raskaan kuormituksen alaisena kahden ensimmäisen esimerkin aikana, kuten %idle-sarake osoittaa.

Seuraavassa osiossa keskustelemme siitä, kuinka tunnistaa nämä resursseja vaativat prosessit, kuinka saada niistä lisätietoja ja miten ryhdytään asianmukaisiin toimiin.

Linux-prosessien raportointi

Listaaksemme prosesseja lajittelemalla ne suorittimen käytön mukaan käytämme hyvin tunnettua ps-komentoa -eo-komennolla (valitsemaan kaikki prosessit käyttäjän määrittämässä muodossa) ja --sort (muokatun lajittelujärjestyksen määrittäminen) asetukset, kuten näin:

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

Yllä oleva komento näyttää vain PID, PPID, prosessiin liittyvän komennon sekä prosessorin ja RAM-käytön prosenttiosuuden CPU:n käytön prosenttiosuuden mukaan lajiteltuna laskevassa järjestyksessä. . Kun tämä suoritetaan .iso-tiedoston luomisen aikana, tulosteen ensimmäiset rivit ovat seuraavat:

Kun olemme tunnistaneet kiinnostavan prosessin (kuten prosessin, jossa on PID=2822), voimme siirtyä osoitteeseen /proc/PID (/proc/2822 tässä tapauksessa) ja tee hakemistolistaus.

Tässä hakemistossa säilytetään useita tiedostoja ja alihakemistoja, joissa on yksityiskohtaisia tietoja tästä tietystä prosessista, kun se on käynnissä.

Esimerkiksi:
  1. /proc/2822/io sisältää prosessin IO-tilastot (mm. luettujen ja kirjoitettujen merkkien ja tavujen määrä IO-toimintojen aikana).
  2. /proc/2822/attr/current näyttää prosessin nykyiset SELinux-suojausattribuutit.
  3. /proc/2822/cgroup kuvaa ohjausryhmät (lyhennettynä cgroups), joihin prosessi kuuluu, jos CONFIG_CGROUPS-ytimen määritysvaihtoehto on käytössä. Voit varmistaa sen seuraavasti:
cat /boot/config-$(uname -r) | grep -i cgroups

Jos vaihtoehto on käytössä, sinun pitäisi nähdä:

CONFIG_CGROUPS=y

Käyttämällä cgroupsia voit hallita sallittua resurssien käyttöä prosessikohtaisesti, kuten on selitetty Red Hat Enterprise Linux 7 Resource Management -oppaan luvuissa 1–4, openSUSE System Analysis -julkaisun luvussa 9. ja viritysopas sekä Ubuntu 14.04 Server -dokumentaation Ohjausryhmät-osiossa.

/proc/2822/fd on hakemisto, joka sisältää yhden symbolisen linkin jokaiselle prosessin avaamalle tiedostokuvaajalle. Seuraava kuva näyttää nämä tiedot prosessista, joka käynnistettiin tty1:ssä (ensimmäinen pääte) .iso-kuvan luomiseksi:

Yllä oleva kuva näyttää, että stdin (tiedoston kuvaus 0), stdout (tiedoston kuvaus 1) ja >stderr (tiedoston kuvaus 2) on yhdistetty muotoihin /dev/zero, /root/test.iso ja >/dev/tty1.

Lisätietoja /proc:sta löytyy Kernel.orgin ylläpitämästä /proc-tiedostojärjestelmästä ja Linux-ohjelmoijan käsikirjasta.

Resurssirajojen asettaminen käyttäjäkohtaisesti Linuxissa

Jos et ole varovainen ja anna kenen tahansa suorittaa rajoittamattoman määrän prosesseja, saatat lopulta kokea odottamattoman järjestelmän sammumisen tai joutua lukittumaan, kun järjestelmä siirtyy käyttökelvottomaan tilaan. Jotta näin ei tapahdu, sinun tulee rajoittaa käyttäjien käynnistämien prosessien määrää.

Voit tehdä tämän muokkaamalla /etc/security/limits.conf-tiedostoa ja lisäämällä seuraavan rivin tiedoston alaosaan asettaaksesi rajan:

*   	hard	nproc   10

Ensimmäistä kenttää voidaan käyttää ilmaisemaan joko käyttäjä, ryhmä tai kaikki (*), kun taas toinen kenttä pakottaa prosessien lukumäärän (nproc) kovan rajoituksen 10. Muutosten käyttöönottamiseksi riittää kirjautuminen ulos ja takaisin sisään.

Katsotaanpa, mitä tapahtuu, jos jokin muu käyttäjä kuin root (joko laillinen tai ei) yrittää käynnistää kuorihaarukkapommin. Jos emme olisi ottaneet käyttöön rajoituksia, tämä käynnistäisi aluksi kaksi funktion esiintymää ja sitten monistaisi niistä jokaisen loputtomana silmukana. Siten se saattaisi lopulta järjestelmän indeksointiin.

Yllä olevan rajoituksen ollessa voimassa haarukkapommi ei kuitenkaan onnistu, mutta käyttäjä lukitaan silti, kunnes järjestelmänvalvoja tappaa siihen liittyvän prosessin:

VINKKI: Muut mahdolliset ulimitin mahdollistamat rajoitukset on dokumentoitu limits.conf-tiedostossa.

Linux Muut prosessinhallintatyökalut

Aiemmin käsiteltyjen työkalujen lisäksi järjestelmänvalvoja saattaa joutua myös:

a) Muokkaa prosessin suoritusprioriteettia (järjestelmäresurssien käyttö) käyttämällä renicea. Tämä tarkoittaa, että ydin varaa enemmän tai vähemmän järjestelmäresursseja prosessille määritetyn prioriteetin perusteella (luku, joka tunnetaan yleisesti nimellä "mukavuus" välillä -20 - 19).

Mitä pienempi arvo, sitä suurempi suoritusprioriteetti. Tavalliset käyttäjät (muut kuin pääkäyttäjät) voivat vain muuttaa omistamiensa prosessien hienoutta korkeampaan arvoon (eli alhaisempaan suoritusprioriteettiin), kun taas root voi muokata tätä arvoa mille tahansa prosessille ja voi lisätä tai vähentää sitä.

Renicen perussyntaksi on seuraava:

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

Jos uuden prioriteettiarvon jälkeistä argumenttia ei ole (tyhjä), se asetetaan oletusarvoisesti PID:ksi. Siinä tapauksessa prosessin hienoudeksi PID=tunniste asetetaan .

b) Keskeytä prosessin normaali suorittaminen tarvittaessa. Tätä kutsutaan yleisesti prosessin "tappamiseksi". Konepellin alla tämä tarkoittaa signaalin lähettämistä prosessille sen suorittamiseksi loppuun kunnolla ja käytettyjen resurssien vapauttamiseksi asianmukaisesti.

Voit lopettaa prosessin käyttämällä kill-komentoa seuraavasti:

kill PID

Vaihtoehtoisesti voit käyttää pkill-komentoa lopettaaksesi kaikki tietyn omistajan (-u) tai ryhmän omistajan (-G) prosessit tai jopa ne prosessit, joilla on PPID. yhteinen (-P). Näitä vaihtoehtoja voi seurata numeerinen esitys tai todellinen nimi tunnisteena:

pkill [options] identifier

Esimerkiksi,

pkill -G 1000

lopettaa kaikki prosessit, jotka ovat ryhmän GID=1000 omistamia.

Ja,

pkill -P 4993 

lopettaa kaikki prosessit, joiden PPID on 4993.

Ennen kuin suoritat pkill-komennon, on hyvä idea testata tuloksia ensin pgrep-komennolla, ehkä käyttämällä -l-vaihtoehtoa myös luetteloimaan prosessien nimet. Se käyttää samat vaihtoehdot, mutta palauttaa vain niiden prosessien PID-tunnukset (ilman lisätoimia), jotka lopetetaan, jos pkill-toimintoa käytetään.

pgrep -l -u gacanepa

Tämä on havainnollistettu seuraavassa kuvassa:

Yhteenveto

Tässä artikkelissa olemme tutkineet muutamia tapoja seurata resurssien käyttöä varmistaaksemme Linux-järjestelmän kriittisten laitteisto- ja ohjelmistokomponenttien eheyden ja saatavuuden.

Olemme myös oppineet ryhtymään asianmukaisiin toimiin (joko muuttamalla tietyn prosessin suoritusprioriteettia tai lopettamalla sen) epätavallisissa olosuhteissa.

Toivomme, että tässä opetusohjelmassa selostetut käsitteet ovat olleet hyödyllisiä. Jos sinulla on kysyttävää tai kommentteja, ota meihin yhteyttä alla olevalla yhteydenottolomakkeella.