LFCS: uzrauga Linux procesu resursu izmantošanu un nosaka procesa ierobežojumus, pamatojoties uz lietotāju - 14. daļa


Sakarā ar nesenajām izmaiņām LFCS sertifikācijas eksāmena mērķos, kas stājas spēkā no 2016. gada 2. februāra, nepieciešamos rakstus pievienojam arī LFCE sērijai.

Katram Linux sistēmas administratoram jāzina, kā pārbaudīt aparatūras, resursu un galveno procesu integritāti un pieejamību. Turklāt resursu ierobežojumu noteikšanai katram lietotājam jābūt arī viņa/viņas prasmju kopai.

Šajā rakstā mēs izpētīsim dažus veidus, kā nodrošināt, ka gan aparatūra, gan programmatūra darbojas pareizi, lai izvairītos no iespējamām problēmām, kas var izraisīt negaidītu ražošanas dīkstāvi un naudas zaudējumus.

Linux pārskatu procesoru statistika

Izmantojot mpstat, jūs varat apskatīt katra procesora darbības atsevišķi vai visu sistēmu kopumā gan kā vienreizēju momentuzņēmumu, gan dinamiski.

Lai izmantotu šo rīku, jums būs jāinstalē 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]

Lasiet vairāk par sysstat un tā utilītprogrammām vietnē Linux Sysstat and Its Utilities mpstat, pidstat, iostat un sar Linux

Kad esat instalējis mpstat, izmantojiet to, lai ģenerētu pārstrādātāju statistikas pārskatus.

Lai parādītu 3 vispārīgus procesora izmantošanas pārskatus ( -u ) visiem procesoriem (kā norādīts -P ALL) ar 2 sekunžu intervālu, rīkojieties šādi:

# 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

Lai skatītu to pašu statistiku par konkrētu CPU (CPU 0 šajā piemērā), izmantojiet:

# 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

Iepriekš minēto komandu izvade parāda šīs kolonnas:

  1. CPU : procesora numurs kā vesels skaitlis vai vārds all kā visu procesoru vidējais lielums.
  2. % usr : Procesora procentuālā daļa, darbinot lietotāja līmeņa lietojumprogrammas.
  3. % nice : tāds pats kā % usr , taču ar labu prioritāti.
  4. % sys : Procesora procentuālā daļa, kas radusies, izpildot kodola lietojumprogrammas. Tas neietver laiku, kas pavadīts, strādājot ar traucējumiem vai aparatūras apstrādi.
  5. % iowait : Laika procentuālā daļa, kad dotais centrālais procesors (vai viss) bija dīkstāvē, un šajā procesorā bija ieplānota resursu ietilpīga I/O darbība. Detalizētāks skaidrojums (ar piemēriem) atrodams šeit.
  6. % irq : Aparatūras traucējumus pavadošā laika procentuālā daļa.
  7. % soft : tāds pats kā % irq , bet ar programmatūras pārtraukumiem.
  8. % steal : to laika procentuālā daļa, kas pavadīti piespiedu gaidīšanas laikā (zagšanas vai nozagšanas laiks), kad virtuālā mašīna kā viesis "uzvar" hipervizora uzmanību, vienlaikus sacenšoties par CPU (-iem). Šī vērtība jāsaglabā pēc iespējas mazāka. Liela vērtība šajā laukā nozīmē, ka virtuālā mašīna apstājas - vai drīz tā būs.
  9. % guest : virtuālā procesora darbināšanai veltītā laika procentuālā daļa.
  10. % idle : laika procentuālā daļa, kad CPU (-i) neveica nevienu uzdevumu. Ja šajā kolonnā novērojat zemu vērtību, tas norāda, ka sistēma ir pakļauta lielai slodzei. Tādā gadījumā jums būs rūpīgāk jāaplūko procesu saraksts, kā mēs to apspriedīsim minūtes laikā, lai noteiktu, kas to izraisa.

Lai ievietotu procesoru nedaudz augstā slodzē, palaidiet šādas komandas un pēc tam izpildiet mpstat (kā norādīts) atsevišķā terminālā:

# 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

Visbeidzot, salīdziniet ar mpstat izvadi “normālos” apstākļos:

Kā redzat augšējā attēlā, pirmajos divos piemēros 0 procesoram bija liela slodze, kā norādīts kolonnā % idle .

Nākamajā sadaļā mēs apspriedīsim, kā identificēt šos resursus alkstošos procesus, kā iegūt vairāk informācijas par tiem un kā rīkoties atbilstoši.

Ziņošana par Linux procesiem

Lai uzskaitītu procesus, sakārtojot tos pēc procesora izmantošanas, mēs izmantosim labi zināmo komandu ps ar -eo (lai atlasītu visus procesus ar lietotāja definētu formātu) un --sort (lai norādītu pielāgotu kārtošanas secību) opcijas, piemēram:

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

Iepriekš minētā komanda parādīs tikai PID , PPID , ar procesu saistīto komandu un CPU un RAM izmantošanas procentus, kas sakārtoti pēc CPU izmantošanas procentiem dilstošā secībā . Kad tas tiek izpildīts .iso faila izveidošanas laikā, šeit ir pirmās izejas rindas:

Kad esam identificējuši interesējošo procesu (piemēram, procesu ar PID = 2822 ), mēs varam pāriet uz /proc/PID (/proc/2822 (šajā gadījumā) un izveidojiet direktoriju sarakstu.

Šajā direktorijā tiek saglabāti vairāki faili un apakšdirektoriji ar detalizētu informāciju par šo konkrēto procesu, kamēr tas darbojas.

  1. /proc/2822/io satur procesa IO statistiku (cita starpā IO darbību laikā lasīto un rakstīto rakstzīmju un baitu skaits).
  2. /proc/2822/attr/current parāda pašreizējos procesa SELinux drošības atribūtus.
  3. /proc/2822/cgroup apraksta vadības grupas (īsumā - cgroups), kurām pieder process, ja ir iespējota kodola konfigurācijas opcija CONFIG_CGROUPS, kuras varat pārbaudīt, izmantojot:

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

Ja opcija ir iespējota, jums vajadzētu redzēt:

CONFIG_CGROUPS=y

Izmantojot cgroups , jūs varat pārvaldīt atļauto resursu izmantošanas apjomu katram procesam, kā paskaidrots Ubuntu 14.04 Server dokumentācijas sadaļas Control Groups 1. līdz 4. nodaļā.

/proc/2822/fd ir direktorijs, kurā ir viena simboliska saite katram procesa atvērtajam faila aprakstam. Šis attēls parāda šo informāciju par procesu, kas tika sākts tty1 (pirmais terminālis), lai izveidotu .iso attēlu:

Iepriekš redzamajā attēlā redzams, ka stdin (faila deskriptors 0), stdout (faila deskriptors 1) un stderr (faila deskriptors 2) tiek attiecīgi kartēti ar/dev/zero, /root/test.iso un/dev/tty1.

Plašāka informācija par /proc ir atrodama dokumentā “The /proc filesystem”, kuru glabā un uztur Kernel.org, un Linux programmētāja rokasgrāmatā.

Resursu ierobežojumu iestatīšana katram lietotājam Linux

Ja neesat piesardzīgs un atļaujat jebkuram lietotājam palaist neierobežotu procesu skaitu, iespējams, negaidīti tiek izslēgta sistēma vai bloķēta, kad sistēma nonāk nelietojamā stāvoklī. Lai tas nenotiktu, jums jāierobežo to procesu skaits, kurus lietotāji var sākt.

Lai to izdarītu, rediģējiet /etc/security/limits.conf un faila apakšdaļā pievienojiet šādu rindu, lai iestatītu ierobežojumu:

*   	hard	nproc   10

Pirmo lauku var izmantot, lai norādītu lietotāju, grupu vai tos visus (*) , savukārt otrajā laukā tiek noteikts stingrs ierobežojums procesa skaitam (nproc) līdz 10. piemērot izmaiņas, pietiek ar atteikšanos un atkārtotu pieteikšanos.

Apskatīsim, kas notiek, ja kāds cits lietotājs, kas nav root (vai nu likumīgs, vai nē), mēģina iedarbināt dakšu ar bumbiņu. Ja mēs nebūtu ieviesuši ierobežojumus, tas sākotnēji iedarbinātu divus funkcijas gadījumus un pēc tam katru no tiem dublētu bezgalīgā ciklā. Tādējādi tas galu galā novestu pie jūsu sistēmas pārmeklēšanas.

Tomēr, ja ir spēkā iepriekš minētais ierobežojums, dakšas bumba neizdodas, bet lietotājs joprojām tiks bloķēts, līdz sistēmas administrators nogalinās ar to saistīto procesu:

PADOMS. Citi iespējamie ierobežojumi, ko nodrošina ulimit, ir dokumentēti failā limits.conf .

Linux citi procesu pārvaldības rīki

Papildus iepriekš apspriestajiem rīkiem sistēmas administratoram var būt nepieciešams:

a) Mainiet procesa izpildes prioritāti (sistēmas resursu izmantošanu), izmantojot renice. Tas nozīmē, ka kodols piešķirs vairāk vai mazāk sistēmas resursu procesam, pamatojoties uz piešķirto prioritāti (skaitlis, ko parasti sauc par “jaukumu” diapazonā no -20 līdz 19 ).

Jo zemāka vērtība, jo lielāka izpildes prioritāte. Parastie lietotāji (izņemot root) var modificēt tikai viņiem piederošo procesu jaukumu uz lielāku vērtību (tas nozīmē zemāku izpildes prioritāti), turpretī root var modificēt šo vērtību jebkuram procesam un var to palielināt vai samazināt.

Renice pamatsintakse ir šāda:

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

Ja arguments pēc jaunās prioritātes vērtības nav (tukšs), pēc noklusējuma tas tiek iestatīts uz PID. Tādā gadījumā procesa ar PID = identifikatoru jaukums tiek iestatīts uz .

b) Ja nepieciešams, pārtrauciet normālu procesa izpildi. To parasti sauc par procesa “nogalināšanu”. Zem pārsega tas nozīmē procesa nosūtīšanu signālam, lai pareizi pabeigtu tā izpildi un kārtīgi atbrīvotu visus izmantotos resursus.

Lai nogalinātu procesu, izmantojiet komandu kill šādi:

# kill PID

Varat arī izmantot pkill, lai pārtrauktu visus konkrētā īpašnieka (-u) vai grupas īpašnieka (-G) procesus, vai pat tos procesus, kuriem ir PPID kopīgs (-P) . Šīm opcijām var sekot ciparu attēlojums vai faktiskais nosaukums kā identifikators:

# pkill [options] identifier

Piemēram,

# pkill -G 1000

nogalinās visus procesus, kas pieder grupai ar GID = 1000.

Un,

# pkill -P 4993 

nogalinās visus procesus, kuru PPID ir 4993.

Pirms pkill palaišanas ieteicams vispirms pārbaudīt rezultātus, izmantojot pgrep, iespējams, izmantojot opciju -l , lai uzskaitītu procesu nosaukumus. Tas prasa tādas pašas iespējas, bet atgriež tikai to procesu PID (neveicot nekādas papildu darbības), kas tiktu nogalināti, ja tiktu izmantots pkill.

# pgrep -l -u gacanepa

Tas ir parādīts nākamajā attēlā:

Kopsavilkums

Šajā rakstā mēs esam izpētījuši dažus veidus, kā uzraudzīt resursu izmantošanu, lai pārbaudītu kritisko aparatūras un programmatūras komponentu integritāti un pieejamību Linux sistēmā.

Mēs esam iemācījušies arī veikt atbilstošas darbības (vai nu pielāgojot konkrētā procesa izpildes prioritāti, vai arī pārtraucot to) neparastos apstākļos.

Mēs ceram, ka šajā apmācībā izskaidrotie jēdzieni ir bijuši noderīgi. Ja jums ir kādi jautājumi vai komentāri, sazinieties ar mums, izmantojot zemāk esošo saziņas veidlapu.