LFCS: Fuatilia Michakato ya Linux Matumizi ya Rasilimali na Weka Mipaka ya Mchakato kwa Msingi wa Kila Mtumiaji - Sehemu ya 14


Kwa sababu ya marekebisho ya hivi majuzi katika malengo ya mtihani wa uthibitishaji wa LFCS kuanzia tarehe 2 Februari 2016, tunaongeza makala yanayohitajika kwenye mfululizo wa LFCE pia.

Kila msimamizi wa mfumo wa Linux anahitaji kujua jinsi ya kuthibitisha uadilifu na upatikanaji wa maunzi, rasilimali na michakato muhimu. Kwa kuongezea, kuweka mipaka ya rasilimali kwa msingi wa kila mtumiaji lazima pia iwe sehemu ya seti ya ujuzi wake.

Katika makala haya tutachunguza njia chache za kuhakikisha kwamba mfumo wa maunzi na programu unatenda ipasavyo ili kuepuka matatizo yanayoweza kusababisha kuchelewesha kwa uzalishaji na upotevu wa pesa usiotarajiwa.

Takwimu za Wachakataji wa Kuripoti wa Linux

Ukiwa na mpstat unaweza kuona shughuli za kila kichakataji kibinafsi au mfumo kwa ujumla, zote mbili kama picha ya mara moja au kwa nguvu.

Ili kutumia zana hii, utahitaji kusakinisha 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]

Soma zaidi kuhusu sysstat na huduma zake katika Jifunze Sysstat na Huduma Zake mpstat, pidstat, iostat na sar katika Linux

Mara tu unaposakinisha mpstat, itumie kutoa ripoti za takwimu za vichakataji.

Ili kuonyesha ripoti 3 za kimataifa za matumizi ya CPU (-u) kwa CPU zote (kama ilivyoonyeshwa na -P ZOTE) kwa muda wa sekunde 2, fanya:

# 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

Ili kutazama takwimu sawa za CPU maalum (CPU 0 katika mfano ufuatao), tumia:

# 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

Matokeo ya amri hapo juu inaonyesha safu wima hizi:

  1. CPU: Nambari ya kichakataji kama nambari kamili, au neno yote kama wastani wa vichakataji vyote.
  2. %usr: Asilimia ya matumizi ya CPU wakati wa kuendesha programu za kiwango cha mtumiaji.
  3. %nzuri: Sawa na %usr, lakini kwa kipaumbele kizuri.
  4. %sys: Asilimia ya matumizi ya CPU ambayo yalitokea wakati wa kutekeleza programu za kernel. Hii haijumuishi muda unaotumika kushughulikia kukatizwa au kushughulikia maunzi.
  5. %iowait: Asilimia ya muda wakati CPU iliyotolewa (au yote) haikuwa na shughuli, wakati ambapo kulikuwa na utendakazi wa I/O wa rasilimali ulioratibiwa kwenye CPU hiyo. Maelezo ya kina zaidi (pamoja na mifano) yanaweza kupatikana hapa.
  6. %irq: Asilimia ya muda unaotumika kuhudumia maunzi kukatizwa.
  7. %laini: Sawa na %irq, lakini kwa kukatizwa kwa programu.
  8. %iba: Asilimia ya muda unaotumika katika kusubiri bila hiari (saa kuiba au kuibiwa) wakati mashine pepe, kama mgeni, inashinda usikivu wa hypervisor wakati wa kuwania CPU(za) . Thamani hii inapaswa kuwekwa ndogo iwezekanavyo. Thamani ya juu katika sehemu hii inamaanisha kuwa mashine pepe inakwama - au itasimama hivi karibuni.
  9. %mgeni: Asilimia ya muda unaotumika kuendesha kichakataji mtandaoni.
  10. %haitumii: asilimia ya muda ambapo CPU(zi) hazikuwa zikitekeleza majukumu yoyote. Ukiona thamani ya chini katika safu hii, hiyo ni dalili ya mfumo kuwekwa chini ya mzigo mkubwa. Katika hali hiyo, utahitaji kuangalia kwa makini orodha ya mchakato, kwani tutajadili kwa dakika moja, ili kujua nini kinachosababisha.

Ili kuweka kichakataji chini ya mzigo wa juu, endesha amri zifuatazo na kisha utekeleze mpstat (kama inavyoonyeshwa) kwenye terminal tofauti:

# 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

Hatimaye, linganisha na matokeo ya mpstat chini ya \hali ya kawaida:

Kama unavyoona kwenye picha hapo juu, CPU 0 ilikuwa chini ya mzigo mzito wakati wa mifano miwili ya kwanza, kama inavyoonyeshwa na safuwima ya %idle.

Katika sehemu inayofuata tutajadili jinsi ya kutambua taratibu hizi za uchu wa rasilimali, jinsi ya kupata taarifa zaidi kuzihusu, na jinsi ya kuchukua hatua zinazofaa.

Kuripoti Michakato ya Linux

Ili kuorodhesha michakato ya kuzipanga kwa matumizi ya CPU, tutatumia ps amri inayojulikana kwa -eo (kuchagua michakato yote iliyo na umbizo lililobainishwa na mtumiaji) na --sort (kutaja mpangilio maalum wa kupanga) chaguzi, kama hivyo:

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

Amri iliyo hapo juu itaonyesha tu PID, PPID, amri inayohusishwa na mchakato, na asilimia ya matumizi ya CPU na RAM iliyopangwa kwa asilimia ya matumizi ya CPU kwa mpangilio wa kushuka. . Inapotekelezwa wakati wa kuunda faili ya .iso, hii hapa ni mistari michache ya kwanza ya matokeo:

Baada ya kutambua mchakato wa maslahi (kama vile ule ulio na PID=2822), tunaweza kwenda kwenye /proc/PID (/proc/2822 katika kesi hii) na fanya orodha ya saraka.

Saraka hii ndipo faili na saraka ndogo zilizo na maelezo ya kina kuhusu mchakato huu huwekwa wakati unaendelea.

  1. /proc/2822/io ina takwimu za IO za mchakato (idadi ya herufi na baiti zilizosomwa na kuandikwa, miongoni mwa zingine, wakati wa operesheni za IO).
  2. /proc/2822/attr/current inaonyesha sifa za sasa za usalama za SELinux za mchakato.
  3. /proc/2822/cgroup inafafanua vikundi vya udhibiti (vikundi kwa ufupi) ambavyo mchakato unamiliki ikiwa chaguo la usanidi wa kernel ya CONFIG_CGROUPS imewezeshwa, ambayo unaweza kuthibitisha nayo:

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

Ikiwa chaguo limewezeshwa, unapaswa kuona:

CONFIG_CGROUPS=y

Kwa kutumia cgroups unaweza kudhibiti kiasi cha matumizi ya rasilimali inayoruhusiwa kwa misingi ya kila mchakato kama ilivyofafanuliwa katika Sura ya 1 hadi ya 4 ya sehemu ya Vikundi vya Kudhibiti ya hati za Seva ya Ubuntu 14.04.

/proc/2822/fd ni saraka ambayo ina kiungo kimoja cha ishara kwa kila kielezi cha faili ambacho mchakato umefunguliwa. Picha ifuatayo inaonyesha maelezo haya ya mchakato ulioanzishwa katika tty1 (terminal ya kwanza) kuunda .iso picha:

Picha hapo juu inaonyesha kuwa stdin (maelezo ya faili 0), stdout (maelezo ya faili 1), na stderr (maelezo ya faili 2) yamepangwa kwa /dev/zero, /root/test.iso, na /dev/tty1, mtawaliwa.

Maelezo zaidi kuhusu /proc yanaweza kupatikana katika \Hati ya /proc mfumo wa faili iliyohifadhiwa na kudumishwa na Kernel.org, na katika Mwongozo wa Mtayarishaji wa Linux.

Kuweka Mipaka ya Rasilimali kwa Msingi wa Kila Mtumiaji katika Linux

Usipokuwa mwangalifu na kuruhusu mtumiaji yeyote kutekeleza idadi isiyo na kikomo ya michakato, unaweza hatimaye kukumbana na kuzimwa kwa mfumo usiotarajiwa au kufungiwa nje mfumo unapoingia katika hali isiyoweza kutumika. Ili kuzuia hili kutokea, unapaswa kuweka kikomo kwa idadi ya michakato ambayo watumiaji wanaweza kuanza.

Ili kufanya hivyo, hariri /etc/security/limits.conf na uongeze laini ifuatayo chini ya faili ili kuweka kikomo:

*   	hard	nproc   10

Sehemu ya kwanza inaweza kutumika kuashiria mtumiaji, kikundi, au wote (*), ilhali sehemu ya pili inatekeleza kikomo kikubwa cha nambari ya mchakato (nproc) hadi 10. tumia mabadiliko, kuingia nje na kurudi ndani inatosha.

Kwa hivyo, wacha tuone kile kinachotokea ikiwa mtumiaji fulani isipokuwa mzizi (ama halali au la) anajaribu kuanzisha bomu la uma la ganda. Ikiwa hatungetekeleza vikomo, hii ingezindua mwanzoni hali mbili za chaguo za kukokotoa, na kisha kunakili kila moja yao kwa kitanzi kisicho na mwisho. Kwa hivyo, hatimaye italeta mfumo wako kwenye kutambaa.

Walakini, kwa kizuizi kilicho hapo juu, bomu la uma halifaulu lakini mtumiaji bado atafungiwa nje hadi msimamizi wa mfumo ataua mchakato unaohusishwa nayo:

KIDOKEZO: Vizuizi vingine vinavyowezekana vinavyowezekana na ulimit vimeandikwa katika faili ya limits.conf.

Linux Zana Zingine za Kusimamia Mchakato

Mbali na zana zilizojadiliwa hapo awali, msimamizi wa mfumo anaweza pia kuhitaji:

a) Rekebisha kipaumbele cha utekelezaji (matumizi ya rasilimali za mfumo) wa mchakato kwa kutumia renice. Hii inamaanisha kuwa kernel itatenga rasilimali nyingi au chache za mfumo kwa mchakato kulingana na kipaumbele kilichopewa (nambari inayojulikana kama \uzuri katika safu kutoka -20 hadi 19).

Kadiri thamani inavyopungua, ndivyo kipaumbele cha utekelezaji kinavyokuwa kikubwa. Watumiaji wa kawaida (mbali na mzizi) wanaweza tu kurekebisha uzuri wa michakato wanayomiliki hadi thamani ya juu (ikimaanisha kipaumbele cha chini cha utekelezaji), ilhali root inaweza kurekebisha thamani hii kwa mchakato wowote, na inaweza kuiongeza au kuipunguza.

Syntax ya msingi ya renice ni kama ifuatavyo:

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

Ikiwa hoja baada ya thamani mpya ya kipaumbele haipo (tupu), imewekwa kwa PID kwa chaguo-msingi. Katika hali hiyo, uzuri wa mchakato na PID=identifier umewekwa kuwa .

b) Kukatiza utekelezaji wa kawaida wa mchakato inapohitajika. Hii inajulikana kama kuua mchakato. Chini ya kifuniko, hii inamaanisha kutuma mchakato ishara ili kukamilisha utekelezaji wake ipasavyo na kutoa nyenzo zozote zilizotumika kwa utaratibu.

Ili kuua mchakato, tumia kill amri kama ifuatavyo:

# kill PID

Vinginevyo, unaweza kutumia pkill kusitisha michakato yote ya mmiliki fulani (-u), au mmiliki wa kikundi (-G), au hata michakato hiyo ambayo ina PPID. kwa pamoja (-P). Chaguo hizi zinaweza kufuatiwa na uwakilishi wa nambari au jina halisi kama kitambulisho:

# pkill [options] identifier

Kwa mfano,

# pkill -G 1000

itaua michakato yote inayomilikiwa na kikundi na GID=1000.

Na,

# pkill -P 4993 

itaua michakato yote ambayo PPID ni 4993.

Kabla ya kuendesha pkill, ni wazo nzuri kujaribu matokeo na pgrep kwanza, labda kwa kutumia chaguo la -l pia kuorodhesha majina ya michakato. Inachukua chaguzi sawa lakini inarudisha tu PID za michakato (bila kuchukua hatua yoyote zaidi) ambayo ingeuawa ikiwa pkill itatumika.

# pgrep -l -u gacanepa

Hii inaonyeshwa kwenye picha ifuatayo:

Muhtasari

Katika makala haya tumechunguza njia chache za kufuatilia matumizi ya rasilimali ili kuthibitisha uadilifu na upatikanaji wa maunzi muhimu na vipengele vya programu katika mfumo wa Linux.

Tumejifunza pia jinsi ya kuchukua hatua ifaayo (ama kwa kurekebisha kipaumbele cha utekelezaji wa mchakato fulani au kwa kuumaliza) katika hali zisizo za kawaida.

Tunatumahi kuwa dhana zilizoelezewa katika somo hili zimesaidia. Ikiwa una maswali au maoni yoyote, jisikie huru kuwasiliana nasi kwa kutumia fomu ya mawasiliano hapa chini.