Vyhledávání na webu

LFCS: Monitorování využití zdrojů linuxových procesů a nastavení procesních limitů na základě jednotlivých uživatelů - Část 14


Vzhledem k nedávným úpravám cílů certifikační zkoušky LFCS účinných od 2. února 2016 přidáváme potřebné články do zde publikované série LFCS. Chcete-li se připravit na tuto zkoušku, důrazně vám doporučujeme projít si také sérii LFCE.

Každý správce systému Linux potřebuje vědět, jak ověřit integritu a dostupnost hardwaru, zdrojů a klíčových procesů. Kromě toho musí být součástí jeho dovedností také nastavení limitů zdrojů na jednotlivé uživatele.

V tomto článku prozkoumáme několik způsobů, jak zajistit, aby se systém choval správně jak hardware, tak software, abychom se vyhnuli potenciálním problémům, které mohou způsobit neočekávané výpadky výroby a finanční ztráty.

Linux Reporting Statistiky procesorů

Pomocí mpstat můžete zobrazit aktivity pro každý procesor jednotlivě nebo systém jako celek, a to jako jednorázový snímek nebo dynamicky.

Abyste mohli tento nástroj používat, budete muset nainstalovat 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]

Přečtěte si více o sysstat a jeho utilitách na Learn Sysstat and Its Utilities mpstat, pidstat, iostat a sar v Linuxu

Jakmile nainstalujete mpstat, použijte jej ke generování zpráv o statistikách procesorů.

Zobrazení 3 globálních zpráv o využití CPU (-u) pro všechny CPU (jak je označeno -P ALL) ve 2sekundovém intervalu , udělejte:

mpstat -P ALL -u 2 3
Ukázkový výstup
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

Chcete-li zobrazit stejné statistiky pro konkrétní CPU (v následujícím příkladu CPU 0), použijte:

mpstat -P 0 -u 2 3
Ukázkový výstup
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

Výstup výše uvedených příkazů zobrazuje tyto sloupce:

  1. CPU: Číslo procesoru jako celé číslo nebo slovo all jako průměr pro všechny procesory.
  2. %usr: Procento využití CPU při spouštění aplikací na uživatelské úrovni.
  3. %nice: Stejné jako %usr, ale s prioritou nice.
  4. %sys: Procento využití CPU, ke kterému došlo při spouštění aplikací jádra. To nezahrnuje čas strávený řešením přerušení nebo manipulací s hardwarem.
  5. %iowait: Procento času, kdy byl daný CPU (nebo všechny) nečinný, během kterého byla na tomto CPU naplánována I/O operace náročná na zdroje. Podrobnější vysvětlení (s příklady) naleznete zde.
  6. %irq: Procento času stráveného obsluhou hardwarových přerušení.
  7. %soft: Stejné jako %irq, ale se softwarovými přerušeními.
  8. %steal: Procento času stráveného nedobrovolným čekáním (krádež nebo ukradený čas), kdy virtuální počítač jako host „získá“ pozornost hypervizora a zároveň soutěží o CPU (procesory). Tato hodnota by měla být co nejmenší. Vysoká hodnota v tomto poli znamená, že se virtuální stroj zastavuje – nebo brzy bude.
  9. %guest: Procento času stráveného spuštěním virtuálního procesoru.
  10. %idle: procento času, kdy CPU(y) neprováděly žádné úlohy. Pokud v tomto sloupci zaznamenáte nízkou hodnotu, znamená to, že je systém vystaven velkému zatížení. V takovém případě se budete muset blíže podívat na seznam procesů, jak si probereme za minutu, abyste zjistili, co to způsobuje.

Chcete-li umístit procesor pod poněkud vysokou zátěž, spusťte následující příkazy a poté spusťte mpstat (jak je uvedeno) v samostatném terminálu:

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

Nakonec porovnejte s výstupem mpstat za „normálních“ okolností:

Jak můžete vidět na obrázku výše, CPU 0 byl během prvních dvou příkladů silně zatížen, jak ukazuje sloupec %idle.

V další části probereme, jak identifikovat tyto procesy náročné na zdroje, jak o nich získat více informací a jak přijmout vhodná opatření.

Hlášení procesů Linuxu

Pro seznam procesů, které je seřadíme podle využití CPU, použijeme dobře známý příkaz ps s -eo (pro výběr všech procesů s uživatelem definovaným formátem) a --sort (pro určení vlastního pořadí řazení), například:

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

Výše uvedený příkaz zobrazí pouze PID, PPID, příkaz spojený s procesem a procento využití CPU a RAM seřazené podle procenta využití CPU v sestupném pořadí. . Při spuštění během vytváření souboru .iso je zde několik prvních řádků výstupu:

Jakmile identifikujeme proces, který nás zajímá (jako je ten s PID=2822), můžeme přejít na /proc/PID (/proc/2822 v tomto případě) a proveďte výpis adresáře.

V tomto adresáři je uloženo několik souborů a podadresářů s podrobnými informacemi o tomto konkrétním procesu, když je spuštěn.

Například:
  1. /proc/2822/io obsahuje IO statistiky pro proces (počet znaků a bajtů přečtených a zapsaných mimo jiné během IO operací).
  2. /proc/2822/attr/current zobrazuje aktuální bezpečnostní atributy SELinux procesu.
  3. /proc/2822/cgroup popisuje kontrolní skupiny (zkráceně cgroups), do kterých proces patří, pokud je povolena možnost konfigurace jádra CONFIG_CGROUPS, kterou můžete ověřit pomocí:
cat /boot/config-$(uname -r) | grep -i cgroups

Pokud je tato možnost povolena, měli byste vidět:

CONFIG_CGROUPS=y

Pomocí cgroups můžete spravovat množství povoleného využití zdrojů na základě jednotlivých procesů, jak je vysvětleno v kapitolách 1 až 4 příručky Red Hat Enterprise Linux 7 Resource Management, v kapitole 9 systému openSUSE System Analysis. a průvodce laděním a v sekci Kontrolní skupiny v dokumentaci k serveru Ubuntu 14.04.

/proc/2822/fd je adresář, který obsahuje jeden symbolický odkaz pro každý deskriptor souboru, který proces otevřel. Následující obrázek ukazuje tyto informace pro proces, který byl spuštěn v tty1 (první terminál) k vytvoření obrazu .iso:

Obrázek výše ukazuje, že stdin (deskriptor souboru 0), stdout (deskriptor souboru 1) a stderr (deskriptor souboru 2) jsou mapovány na /dev/zero, /root/test.iso a /dev/tty1.

Více informací o /proc lze nalézt v dokumentu „Souborový systém /proc“, který vede a spravuje Kernel.org, a v Linux Programmer’s Manual.

Nastavení limitů zdrojů na základě jednotlivých uživatelů v Linuxu

Pokud si nedáte pozor a povolíte libovolnému uživateli spouštět neomezený počet procesů, může dojít k neočekávanému vypnutí systému nebo k uzamčení, protože systém přejde do nepoužitelného stavu. Abyste tomu zabránili, měli byste nastavit limit na počet procesů, které mohou uživatelé spustit.

Chcete-li to provést, upravte soubor /etc/security/limits.conf a přidejte na konec souboru následující řádek pro nastavení limitu:

*   	hard	nproc   10

První pole lze použít k označení uživatele, skupiny nebo všech z nich (*), zatímco druhé pole vynucuje pevný limit na počet procesů (nproc) do 10. Pro uplatnění změn stačí odhlášení a opětovné přihlášení.

Podívejme se tedy, co se stane, pokud se určitý uživatel jiný než root (ať už legitimní, nebo ne) pokusí spustit skořepinovou bombu. Pokud bychom neimplementovali limity, spustilo by to zpočátku dvě instance funkce a pak by každou z nich duplikovalo v nekonečné smyčce. To by nakonec přivedlo váš systém k procházení.

S výše uvedeným omezením však vidlicová bomba neuspěje, ale uživatel bude stále uzamčen, dokud správce systému nezabije proces s ním spojený:

TIP: Další možná omezení, která umožňuje ulimit, jsou zdokumentována v souboru limits.conf.

Linux Další nástroje pro správu procesů

Kromě výše uvedených nástrojů může správce systému také potřebovat:

a) Upravte prioritu provádění (použití systémových prostředků) procesu pomocí renice. To znamená, že jádro přidělí procesu více či méně systémových prostředků na základě přiřazené priority (číslo běžně známé jako „příjemnost “ v rozsahu od -20 do 19).

Čím nižší hodnota, tím vyšší priorita provedení. Běžní uživatelé (jiní než root) mohou pouze upravit kvalitu procesů, které vlastní, na vyšší hodnotu (což znamená nižší prioritu provádění), zatímco root může tuto hodnotu upravit pro jakýkoli proces a může ji zvýšit nebo snížit.

Základní syntaxe renice je následující:

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

Pokud argument za novou hodnotou priority není přítomen (prázdný), je standardně nastaven na PID. V takovém případě je přesnost procesu s PID=identifikátor nastavena na .

b) V případě potřeby přerušte normální provádění procesu. Toto je běžně známé jako „zabíjení“ procesu. Pod kapotou to znamená poslat procesu signál, aby řádně dokončil své provádění a uvolnil všechny použité zdroje uspořádaným způsobem.

Chcete-li proces zabít, použijte příkaz kill takto:

kill PID

Alternativně můžete pomocí pkill ukončit všechny procesy daného vlastníka (-u) nebo vlastníka skupiny (-G) nebo dokonce procesy, které mají PPID společné (-P). Za těmito možnostmi může následovat číselná reprezentace nebo skutečný název jako identifikátor:

pkill [options] identifier

Například,

pkill -G 1000

zabije všechny procesy vlastněné skupinou s GID=1000.

A,

pkill -P 4993 

zabije všechny procesy, jejichž PPID je 4993.

Před spuštěním pkill je dobré nejprve otestovat výsledky pomocí pgrep, případně použít také možnost -l a uvést názvy procesů. Bere stejné možnosti, ale vrací pouze PID procesů (bez provedení jakékoli další akce), které by byly zabity při použití pkill.

pgrep -l -u gacanepa

To je znázorněno na následujícím obrázku:

souhrn

V tomto článku jsme prozkoumali několik způsobů, jak monitorovat využití zdrojů, abychom ověřili integritu a dostupnost kritických hardwarových a softwarových komponent v systému Linux.

Také jsme se naučili, jak za neobvyklých okolností přijmout vhodná opatření (buď úpravou priority provádění daného procesu nebo jeho ukončením).

Doufáme, že vám koncepty vysvětlené v tomto tutoriálu pomohly. Pokud máte nějaké dotazy nebo připomínky, neváhejte nás kontaktovat pomocí kontaktního formuláře níže.