Vyhledávání na webu

Jak monitorovat využití systému, výpadky a odstraňovat problémy se servery Linux – část 9


Přestože je Linux velmi spolehlivý, moudří správci systému by měli najít způsob, jak neustále sledovat chování a využití systému. Zajištění provozuschopnosti co nejblíže 100 % a dostupnost zdrojů jsou zásadními potřebami v mnoha prostředích. Zkoumání minulého a současného stavu systému nám umožní předvídat a s největší pravděpodobností předcházet možným problémům.

Představujeme certifikační program Linux Foundation

V tomto článku představíme seznam několika nástrojů, které jsou k dispozici ve většině upstream distribucí pro kontrolu stavu systému, analýzu výpadků a řešení přetrvávajících problémů. Konkrétně se z nespočtu dostupných dat zaměříme na CPU, využití úložného prostoru a paměti, základní správu procesů a analýzu logů.

Využití úložného prostoru

V Linuxu jsou 2 známé příkazy, které se používají ke kontrole využití úložného prostoru: df a du.

První, df (což znamená disk free), se obvykle používá k hlášení celkového využití místa na disku systémem souborů.

Příklad 1: Hlášení využití místa na disku v bajtech a ve formátu čitelném pro člověka

Bez voleb df hlásí využití místa na disku v bajtech. S příznakem -h zobrazí stejné informace místo toho v MB nebo GB. Všimněte si, že tato zpráva také obsahuje celkovou velikost každého souborového systému (v blocích 1-K), volné a dostupné místo a bod připojení každého úložného zařízení.

df
df -h

To je jistě hezké – ale je tu další omezení, které může způsobit, že systém souborů bude nepoužitelný, a to je nedostatek inodů. Všechny soubory v systému souborů jsou mapovány na inode, který obsahuje jeho metadata.

Příklad 2: Kontrola využití inodu systémem souborů ve formátu čitelném pro člověka s
df -hTi

můžete vidět množství použitých a dostupných inodů:

Podle obrázku výše je v /home 146 použitých inodů (1 %), což znamená, že v tomto souborovém systému můžete stále vytvářet soubory o velikosti 226 kB.

Příklad 3: Nalezení a/nebo odstranění prázdných souborů a adresářů

Všimněte si, že vám může dojít úložný prostor dlouho předtím, než vám dojdou inody, a naopak. Z toho důvodu musíte sledovat nejen využití úložného prostoru, ale také počet inodů používaných souborovým systémem.

Pomocí následujících příkazů vyhledejte prázdné soubory nebo adresáře (které zabírají 0B), které bez důvodu používají inody:

find  /home -type f -empty
find  /home -type d -empty

Také můžete přidat příznak -delete na konec každého příkazu, pokud chcete také odstranit tyto prázdné soubory a adresáře:

find  /home -type f -empty --delete
find  /home -type f -empty

Předchozí postup smazal 4 soubory. Znovu zkontrolujeme počet použitých/dostupných uzlů v /home:

df -hTi | grep home

Jak můžete vidět, nyní se používá 142 inodů (o 4 méně než dříve).

Příklad 4: Zkoumání využití disku podle adresáře

Pokud je využití určitého souborového systému vyšší než předdefinované procento, můžete použít du (zkratka pro využití disku) ke zjištění, které soubory zabírají nejvíce místa.

Příklad je uveden pro /var, který, jak můžete vidět na prvním obrázku výše, je použit na 67 %.

du -sch /var/*

Poznámka: Můžete přepnout do kteréhokoli z výše uvedených podadresářů a zjistit, co přesně v nich je a kolik jednotlivé položky zabírají. Tyto informace pak můžete použít k odstranění některých souborů, pokud nejsou potřeba, nebo k rozšíření velikosti logického svazku, pokud je to nutné.

Přečtěte si také

  1. 12 Užitečné příkazy „df“ pro kontrolu místa na disku
  2. 10 užitečných příkazů „du“ pro zjištění využití disku pro soubory a adresáře

Využití paměti a CPU

Klasickým nástrojem v Linuxu, který se používá k celkové kontrole využití CPU/paměti a řízení procesů, je top command. Top navíc zobrazuje pohled na běžící systém v reálném čase. Existují další nástroje, které by mohly být použity pro stejný účel, jako je htop, ale já jsem se spokojil s top, protože je nainstalován přímo v jakékoli distribuci Linuxu.

Příklad 5: Zobrazení aktuálního stavu vašeho systému s top

Chcete-li začít, jednoduše zadejte následující příkaz do příkazového řádku a stiskněte Enter.

top

Podívejme se na typický špičkový výstup:

V řádcích 1 až 5 se zobrazí následující informace:

1. Aktuální čas (20:41:32) a doba provozu (7 hodin a 41 minut). Do systému je přihlášen pouze jeden uživatel a průměrná zátěž za posledních 1, 5 a 15 minut. 0,00, 0,01 a 0,05 znamenají, že v těchto časových intervalech byl systém nečinný po 0 % času (0,00: žádné procesy nečekaly na CPU), poté byl přetížen o 1 % (0,01: průměrně 0,01 procesů čekali na CPU) a 5 % (0,05). Pokud je menší než 0 a čím menší je číslo (například 0,65), byl systém nečinný po dobu 35 % během posledních 1, 5 nebo 15 minut, v závislosti na tom, kde se objeví 0,65.

2. V současné době je spuštěno 121 procesů (úplný seznam můžete vidět v 6). Pouze 1 z nich běží (v tomto případě nahoře, jak můžete vidět ve sloupci %CPU) a zbývajících 120 čeká na pozadí, ale „spí“ a zůstanou v tomto stavu, dokud je nezavoláme. Jak? Můžete to ověřit otevřením výzvy mysql a provedením několika dotazů. Všimnete si, jak se zvyšuje počet běžících procesů.

Případně můžete otevřít webový prohlížeč a přejít na libovolnou stránku, kterou Apache obsluhuje, a získáte stejný výsledek. Tyto příklady samozřejmě předpokládají, že jsou na vašem serveru nainstalovány obě služby.

3. us (čas běžící uživatelské procesy s nezměněnou prioritou), sy (čas běžící procesy jádra), ni (čas běžící uživatelské procesy s upravenou prioritou), wa (čas čekání na dokončení I/O), hi (čas strávený obsluhou hardwarových přerušení), si (čas strávený obsluhou softwarových přerušení), st (čas ukradený z aktuálního vm hypervisorem – pouze ve virtualizovaných prostředích).

4. Využití fyzické paměti.

5. Swap využití místa.

Příklad 6: Kontrola využití fyzické paměti

Pro kontrolu paměti RAM a využití swapu můžete také použít příkaz free.

free

Samozřejmě můžete také použít přepínače -m (MB) nebo -g (GB) pro zobrazení stejných informací ve formě čitelné pro člověka:

free -m

V každém případě si musíte být vědomi skutečnosti, že jádro rezervuje co nejvíce paměti a zpřístupňuje ji procesům, když si to vyžádají. Zejména řádek „-/+ buffers/cache“ ukazuje skutečné hodnoty po zohlednění této I/O cache.

Jinými slovy, množství paměti používané procesy a množství dostupné pro ostatní procesy (v tomto případě 232 MB použitých a 270 MB dostupných, v tomto pořadí). Když procesy potřebují tuto paměť, jádro automaticky sníží velikost I/O cache.

Přečtěte si také: 10 užitečných „free“ příkazů ke kontrole využití paměti Linuxu

Bližší pohled na procesy

V každém okamžiku na našem systému Linux běží mnoho procesů. Existují dva nástroje, které budeme používat k podrobnému monitorování procesů: ps a pstree.

Příklad 7: Zobrazení celého seznamu procesů ve vašem systému pomocí ps (úplný standardní formát)

Pomocí voleb -e a -f spojených do jedné (-ef) můžete vypsat všechny procesy, které aktuálně běží na vašem systému. Tento výstup můžete propojit s jinými nástroji, jako je grep (jak je vysvětleno v 1. části série LFCS), abyste zúžili výstup na požadované procesy:

ps -ef | grep -i squid | grep -v grep

Výše uvedený proces obsahuje následující informace:

vlastník procesu, PID, Parent PID (rodičovský proces), využití procesoru, čas, kdy byl příkaz spuštěn, tty (? označuje, že se jedná o démona), kumulovaný čas CPU a příkaz spojený s procesem.

Příklad 8: Přizpůsobení a řazení výstupu ps

Možná však nepotřebujete všechny tyto informace a chtěli byste ukázat vlastníka procesu, příkaz, který jej spustil, jeho PID a PPID a procento paměti, kterou aktuálně využívá – v tomto pořadí a seřadit podle využití paměti v sestupném pořadí (všimněte si, že ps je standardně řazeno podle PID).

ps -eo user,comm,pid,ppid,%mem --sort -%mem

Kde znaménko mínus před %mem označuje řazení v sestupném pořadí.

Pokud z nějakého důvodu proces začne spotřebovávat příliš mnoho systémových prostředků a je pravděpodobné, že ohrozí celkovou funkčnost systému, budete chtít zastavit nebo pozastavit jeho provádění a předat mu jeden z následujících signálů pomocí programu kill. Dalším důvodem, proč byste to měli zvážit, je situace, kdy jste proces spustili na popředí, ale chcete jej pozastavit a pokračovat na pozadí.

Signal name Signal number Description
 SIGTERM 15  Kill the process gracefully.
 SIGINT 2  This is the signal that is sent when we press Ctrl + C. It aims to interrupt the process, but the process may ignore it.
 SIGKILL 9  This signal also interrupts the process but it does so unconditionally (use with care!) since a process cannot ignore it.
 SIGHUP 1  Short for “Hang UP”, this signals instructs daemons to reread its configuration file without actually stopping the process.
 SIGTSTP 20  Pause execution and wait ready to continue. This is the signal that is sent when we type the Ctrl + Z key combination.
 SIGSTOP 19  The process is paused and doesn’t get any more attention from the CPU cycles until it is restarted.
 SIGCONT 18  This signal tells the process to resume execution after having received either SIGTSTP or SIGSTOP. This is the signal that is sent by the shell when we use the fg or bg commands.
Příklad 9: Pozastavení provádění běžícího procesu a jeho obnovení na pozadí

Když normální provádění určitého procesu znamená, že během jeho běhu nebude na obrazovku odeslán žádný výstup, můžete jej buď spustit na pozadí (přidat ampersand na konec příkazu).

process_name &

nebo
Jakmile se spustí v popředí, pozastavte jej a odešlete jej na pozadí pomocí

Ctrl + Z
kill -18 PID

Příklad 10: Zabití násilím procesu „zblázněného“

Vezměte prosím na vědomí, že každá distribuce poskytuje nástroje pro plynulé zastavení/spuštění/restartování/opětovné načtení běžných služeb, jako je service v systémech založených na SysV nebo systemctl v systémech založených na systemd.

Pokud proces na tyto nástroje nereaguje, můžete ho zabít násilím tak, že mu pošlete signál SIGKILL.

ps -ef | grep apache
kill -9 3821

Takže.. Co se stalo/Děje se?

Pokud dojde k jakémukoli výpadku v systému (ať už jde o výpadek napájení, selhání hardwaru, plánované nebo neplánované přerušení procesu nebo jakoukoli abnormalitu), přihlásí se /var/log jsou vašimi nejlepšími přáteli, abyste zjistili, co se stalo nebo co by mohlo být příčinou problémů, kterým čelíte.

cd /var/log

Některé položky v /var/log jsou běžné textové soubory, jiné jsou adresáře a další jsou komprimované soubory rotovaných (historických) protokolů. Budete chtít zkontrolovat ty, kteří mají v názvu slovo chyba, ale kontrola zbytku se může také hodit.

Příklad 11: Prověřování protokolů na chyby v procesech

Představte si tento scénář. Vaši LAN klienti nemohou tisknout na síťové tiskárny. Prvním krokem k vyřešení této situace je přejít do adresáře /var/log/cups a podívat se, co tam je.

Můžete použít příkaz tail pro zobrazení posledních 10 řádků souboru error_log nebo tail -f error_log pro zobrazení protokolu v reálném čase.

cd /var/log/cups
ls
tail error_log

Výše uvedený snímek obrazovky poskytuje užitečné informace, které vám pomohou pochopit, co by mohlo způsobovat váš problém. Uvědomte si, že následování kroků nebo oprava nefunkčnosti procesu stále nemusí vyřešit celkový problém, ale pokud si hned od začátku zvyknete kontrolovat protokoly pokaždé, když se objeví problém (ať už lokální nebo síťový), bude určitě na správné cestě.

Příklad 12: Zkoumání chyb hardwaru v protokolech

I když může být řešení hardwarových poruch složité, měli byste zkontrolovat dmesg a protokoly zpráv a grep, zda neobsahují slova související s hardwarovou částí, o které se předpokládá, že je vadná.

Níže uvedený obrázek je převzat z /var/log/messages po vyhledání slova chyba pomocí následujícího příkazu:

less /var/log/messages | grep -i error

Vidíme, že máme problém se dvěma úložnými zařízeními: /dev/sdb a /dev/sdc, což zase způsobuje problém s polem RAID.

Závěr

V tomto článku jsme prozkoumali některé nástroje, které vám mohou pomoci, abyste si byli vždy vědomi celkového stavu vašeho systému. Kromě toho se musíte ujistit, že váš operační systém a nainstalované balíčky jsou aktualizovány na nejnovější stabilní verze. A nikdy, nikdy, nezapomeňte zkontrolovat protokoly! Pak se vydáte správným směrem, abyste našli definitivní řešení všech problémů.

Neváhejte zanechat své komentáře, návrhy nebo dotazy – pokud nějaké máte – pomocí formuláře níže.