LFCS: Monitor Linux Prozesser Ressource Notzung a Set Prozess Limite op engem Per-Benotzer Basis - Deel 14


Wéinst rezent Ännerungen an der LFCS Zertifizéierung Examen Ziler effektiv vum 2. Februar 2016, addéiere mir déi néideg Artikelen och an d'LFCE Serie.

All Linux System Administrateur muss wëssen, wéi d'Integritéit an Disponibilitéit vun Hardware, Ressourcen, a Schlëssel Prozesser z'iwwerpréiwen. Ausserdeem muss d'Ressourcegrenzen op enger pro Benotzerbasis och en Deel vu sengem/hirem Fäegkeete sinn.

An dësem Artikel wäerte mir e puer Weeër entdecken fir sécherzestellen datt de System souwuel d'Hardware wéi och d'Software sech richteg behuelen fir potenziell Problemer ze vermeiden déi onerwaart Produktiounsausbréch a Geldverloscht verursaache kënnen.

Linux Berichterstattung Prozessor Statistiken

Mat mpstat kënnt Dir d'Aktivitéite fir all Prozessor individuell oder de System als Ganzt gesinn, souwuel als eemoleg Snapshot oder dynamesch.

Fir dëst Tool ze benotzen, musst Dir Sysstat installéieren:

# 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]

Liest méi iwwer Sysstat an seng Utilities bei Léiert Sysstat a seng Utilities mpstat, pidstat, iostat a sar am Linux

Wann Dir mpstat installéiert hutt, benotzt et fir Berichter iwwer Prozessorstatistiken ze generéieren.

Fir 3 global Berichter iwwer d'CPU-Notzung (-u) fir all CPUs ze weisen (wéi vun -P ALL uginn) an engem Intervall vun 2 Sekonnen, maacht:

# 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

Fir déiselwecht Statistike fir eng spezifesch CPU ze gesinn (CPU 0 am folgende Beispill), benotzt:

# 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

D'Ausgab vun den uewe genannte Kommandoen weist dës Kolonnen:

  1. CPU: Prozessornummer als Ganzt, oder d'Wuert all als Moyenne fir all Prozessoren.
  2. %usr: Prozentsaz vun der CPU-Notzung beim Laafen vun Uwendungen op Benotzerniveau.
  3. %nice: Selwecht wéi %usr, awer mat gudder Prioritéit.
  4. %sys: Prozentsaz vun der CPU-Notzung, déi geschitt ass beim Ausféiere vun Kernel-Applikatiounen. Dëst beinhalt net d'Zäit déi mat Ënnerbriechungen ëmgeet oder d'Hardware behandelen.
  5. %iowait: Prozentsaz vun der Zäit wou déi gegebene CPU (oder all) inaktiv war, während där et eng Ressourceintensiv I/O Operatioun op där CPU geplangt war. Eng méi detailléiert Erklärung (mat Beispiller) fannt Dir hei.
  6. %irq: Prozentsaz vun der Zäit, déi mat Hardware-Ënnerbriechungen benotzt gëtt.
  7. %soft: Selwecht wéi %irq, awer mat Software Ënnerbriechungen.
  8. %klauen: Prozentsaz vun der Zäit, déi an onfräiwëlleger Waarde verbraucht gëtt (geklaut oder geklaut Zäit), wann eng virtuell Maschinn, als Gaascht, dem Hypervisor seng Opmierksamkeet \gewënnt beim Konkurrenz fir d'CPU(en) . Dëse Wäert soll esou kleng wéi méiglech gehale ginn. En héije Wäert an dësem Feld bedeit datt d'virtuell Maschinn stoppt - oder geschwënn wäert sinn.
  9. %guest: Prozentsaz vun der Zäit fir e virtuelle Prozessor ze lafen.
  10. %idle: Prozentsaz vun der Zäit wou d'CPU(en) keng Aufgaben ausféieren. Wann Dir e nidderegen Wäert an dëser Kolonn beobachtet, ass dat eng Indikatioun datt de System ënner enger schwéierer Belaaschtung gesat gëtt. An deem Fall musst Dir d'Prozesslëscht méi genau kucken, wéi mir an enger Minutt diskutéieren, fir ze bestëmmen wat et verursaacht.

Fir d'Plaz de Prozessor ënner enger e bëssen héijer Belaaschtung ze setzen, fuert déi folgend Kommandoen an ausféiert dann mpstat (wéi uginn) an engem separaten Terminal:

# 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

Endlech, vergläicht mat der Ausgang vum mpstat ënner \normalen Ëmstänn:

Wéi Dir am Bild hei uewen gesitt, war CPU 0 ënner enger schwéierer Belaaschtung während den éischten zwee Beispiller, wéi et vun der %idle Kolonn uginn.

An der nächster Rubrik wäerte mir diskutéieren wéi dës Ressource-hongereg Prozesser z'identifizéieren, wéi méi Informatiounen iwwert hinnen ze kréien, a wéi passenden Aktioun ze huelen.

Bericht Linux Prozesser

Fir Prozesser ze lëschten, déi se no CPU Benotzung sortéieren, benotze mir de bekannte ps Kommando mam -eo (fir all Prozesser mat Benotzerdefinéiert Format ze wielen) an --sort (fir eng personaliséiert Sortéierungsuerdnung ze spezifizéieren) Optiounen, sou wéi:

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

Deen uewe genannte Kommando weist nëmmen den PID, PPID, de Kommando, dee mam Prozess assoziéiert ass, an de Prozentsaz vun der CPU- a RAM-Notzung sortéiert no de Prozentsaz vun der CPU-Notzung an ofstigend Uerdnung . Wann ausgefouert während der Schafung vun der .iso Datei, hei sinn déi éischt puer Zeilen vun der Ausgab:

Wann mir en Interessiprozess identifizéiert hunn (wéi dee mat PID=2822), kënne mir op /proc/PID navigéieren (/proc/2822 an dësem Fall) a maacht eng Verzeechneslëscht.

Dëse Verzeechnes ass wou verschidde Dateien an Ënnerverzeechnunge mat detailléierter Informatioun iwwer dëse bestëmmte Prozess gehale ginn wärend et leeft.

  1. /proc/2822/io enthält IO Statistike fir de Prozess (Zuel vun Zeechen a Bytes gelies a geschriwwe, ënner anerem während IO Operatiounen).
  2. /proc/2822/attr/current weist déi aktuell SELinux Sécherheetsattributer vum Prozess.
  3. /proc/2822/cgroup beschreift d'Kontrollgruppen (kuerz cgroups) zu deenen de Prozess gehéiert wann d'CONFIG_CGROUPS Kernel Konfiguratiounsoptioun aktivéiert ass, déi Dir verifizéiere kënnt mat:

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

Wann d'Optioun aktivéiert ass, sollt Dir gesinn:

CONFIG_CGROUPS=y

Mat cgroups kënnt Dir de Betrag vun der erlaabter Ressourceverbrauch op enger pro-Prozessbasis verwalten wéi an de Kapitelen 1 bis 4 vun der Kontrollgruppen Sektioun vun der Ubuntu 14.04 Server Dokumentatioun erkläert.

De /proc/2822/fd ass e Verzeechnes deen e symbolesche Link fir all Dateideskriptor enthält, deen de Prozess opgemaach huet. Déi folgend Bild weist dës Informatioun fir de Prozess deen am tty1 (den éischten Terminal) gestart gouf fir den .iso Bild ze kreéieren:

Déi uewe Bild weist datt stdin (Dateibeschreiwung 0), stdout (Dateibeschreiwung 1) a stderr (Dateibeschreiwung 2) op /dev/zero, /root/test.iso, an /dev/tty1, respektiv.

Méi Informatioun iwwer /proc kann am \The /proc Dateisystem Dokument fonnt ginn, dat vun Kernel.org gehale gëtt an ënnerhale gëtt, an am Linux Programmer's Manual.

Ressource Limiten op Per-Benotzer Basis a Linux setzen

Wann Dir net virsiichteg sidd an all Benotzer erlaabt eng onlimitéiert Zuel vu Prozesser auszeféieren, kënnt Dir eventuell en onerwaarte Systemausschaltung erliewen oder gespaart ginn wéi de System an en onbenotzbaren Zoustand kënnt. Fir dëst ze vermeiden, sollt Dir eng Limit setzen fir d'Zuel vun de Prozesser déi d'Benotzer kënnen ufänken.

Fir dëst ze maachen, änneren /etc/security/limits.conf a füügt déi folgend Zeil um Enn vun der Datei fir d'Limite ze setzen:

*   	hard	nproc   10

Dat éischt Feld kann benotzt ginn fir entweder e Benotzer, e Grupp oder all (*) unzeginn, wärend dat zweet Feld eng haart Limit fir d'Zuel vu Prozesser (nproc) op 10 erzwéngt. Ännerungen gëllen, ausloggen an zréck an ass genuch.

Also, loosst eis kucken wat geschitt wann e bestëmmte Benotzer anescht wéi Root (entweder e legitimen oder net) probéiert eng Shell Gabelbomm ze starten. Wa mir keng Limiten implementéiert hätten, géif dëst am Ufank zwee Instanzen vun enger Funktioun starten, an dann all vun hinnen an enger onendlecher Loop duplizéieren. Sou géif et schlussendlech Äre System zu engem Crawl bréngen.

Wéi och ëmmer, mat der uewe genannter Restriktioun op der Plaz, geléngt d'Gabelbomm net, awer de Benotzer gëtt ëmmer nach gespaart bis de Systemadministrator de Prozess ëmbréngt, deen domat verbonnen ass:

TIP: Aner méiglech Restriktiounen, déi duerch ulimit méiglech gemaach ginn, sinn an der limits.conf Datei dokumentéiert.

Linux Aner Prozess Management Tools

Zousätzlech zu den Tools, déi virdru diskutéiert goufen, muss e Systemadministrator och:

eng) Änneren der Ausféierung Prioritéit (Notzung vun System Ressourcen) vun engem Prozess benotzt Renice. Dëst bedeit datt de Kernel méi oder manner Systemressourcen un de Prozess allokéiert baséiert op der zougewisener Prioritéit (eng Zuel allgemeng bekannt als Niceness an engem Beräich vun -20 bis 19 Code>).

Wat de Wäert méi niddereg ass, wat d'Ausféierungsprioritéit méi grouss ass. Regelméisseg Benotzer (ausser Root) kënnen nëmmen d'Schéinheet vun de Prozesser, déi se besëtzen, op e méi héije Wäert änneren (dat heescht eng méi niddereg Ausféierungsprioritéit), wärend Root dëse Wäert fir all Prozess ka änneren, a kann et erhéijen oder erofgoen.

D'Basis Syntax vu Renice ass wéi follegt:

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

Wann d'Argument nom neie Prioritéitswäert net präsent ass (eidel), gëtt et als Standard op PID gesat. An deem Fall ass d'Gläichheet vum Prozess mat PID = Identifizéierer op gesat.

b) Ënnerbriechung déi normal Ausféierung vun engem Prozess wann néideg. Dëst ass allgemeng bekannt als de Prozess ëmzebréngen. Ënnert der Hood heescht dat de Prozess e Signal ze schécken fir seng Ausféierung richteg ofzeschléissen an all gebrauchte Ressourcen op eng uerdentlech Manéier ze befreien.

Fir e Prozess ëmzebréngen, benotzt de Kill Kommando wéi follegt:

# kill PID

Alternativ kënnt Dir pkill benotze fir all Prozesser vun engem bestëmmte Besëtzer (-u), oder e Gruppbesëtzer (-G), oder souguer déi Prozesser déi e PPID hunn, ofzeschléissen gemeinsam (-P). Dës Optioune kënne vun der numerescher Representatioun oder dem aktuellen Numm als Identifizéierer gefollegt ginn:

# pkill [options] identifier

Zum Beispill,

# pkill -G 1000

wäert all Prozesser am Besëtz vun der Grupp mat GID = 1000 ëmbréngen.

an,

# pkill -P 4993 

wäert all Prozesser ëmbréngen, deenen hir PPID 4993 ass.

Ier Dir e pkill leeft, ass et eng gutt Iddi d'Resultater mat pgrep als éischt ze testen, vläicht benotzt d'Optioun -l och fir d'Nimm vun de Prozesser ze lëschten. Et hëlt déiselwecht Optiounen awer bréngt nëmmen d'PIDs vu Prozesser zréck (ouni weider Handlung ze huelen) déi ëmbruecht gi wa pkill benotzt gëtt.

# pgrep -l -u gacanepa

Dëst ass am nächste Bild illustréiert:

Resumé

An dësem Artikel hu mir e puer Weeër entdeckt fir d'Ressourceverbrauch ze iwwerwaachen fir d'Integritéit an d'Disponibilitéit vu kriteschen Hardware- a Softwarekomponenten an engem Linux System z'iwwerpréiwen.

Mir hunn och geléiert wéi mir passend Handlungen ënnerhuelen (entweder andeems Dir d'Ausféierungsprioritéit vun engem bestëmmte Prozess ugepasst oder se ofschléisst) ënner ongewéinlechen Ëmstänn.

Mir hoffen, datt d'Konzepter, déi an dësem Tutorial erkläert ginn, hëllefräich waren. Wann Dir Froen oder Bemierkungen hutt, kënnt Dir eis gären erreechen andeems Dir de Kontaktformular hei drënner benotzt.