← Zpět na všechny články blogu

RAM na Linuxu

Karel Dytrych
Váš Hosting 13. 5. 2019 - 13 min. čtení
Blog

Do operační paměti si může server nebo aplikace ukládat data, ale pokud paměť dojde, tak server přejde k plánu B a začne tyto data ukládat na pevný disk (swap), který je mnohem pomalejší.

Je tedy důležité operační paměť pravidelně sledovat a v případě problému včas zakročit. U nás na serveru máte předinstalované s VPS Centrem dvě aplikace Munin a phpSysinfo, kde uvidíte statistiky ohledně RAM.

Pokud má server dostatek RAM, tak jí využívá k uchovávání cache, aby nemusel pokaždé načítat stejný soubor vícekrát. Pokud server restartujete, tak cache vyčistíte.

Ukazatel mezipaměti v aplikaci sysinfo

VPS Centrum

Vyzkoušejte zdarma naši aplikaci pro správu serveru a domén. Budete si připadat jako zkušený administrátor.

Nebojte se, že cache si vezme všechny RAM prostředky, které na serveru máte. Využívá pouze nevyužitou paměť. Hlavní prioritu má samozřejmě jádro a aplikace a pokud by potřebovali víc paměti, tak mezipaměť jí uvolní.

Disk caching nelze vypnout, ale jediný důvod, proč to chtěl někdo vypnout byl, že nevěděl, jak to přesně funguje a že to má pouze samá pozitiva.

Příkazová řádka

Pomocí příkazu free -g uvidíte, kolik máte na serveru volné RAM v GB nebo free -m v MB. Poznáte kolik se jí využívá na buffer/cache a uvidíte i využití swapu.

Výstup přikazu free -m

Pokud uvidíte, že server spotřebovává 99% RAM, tak s největší pravděpodobností započítává cache jako “memory used” i když v případě potřeby se paměť dokáže uvolnit. (výborně zobrazuje využití RAMU právě aplikace z VPS Centra sysinfo)

Stejný server, jiný výstup.

Oblíbený příkaz na terminálu je HTOP.

Je to barevnější a promakanější verze příkazu “top”, vypíše všechny běžící a spící procesy.

Během chvíle, tak zjistíte momentální využití RAM, SWAPu nebo CPU. Hlavně ale uvidíte veškeré procesy a můžete si je po kliknutí v horní liště např. seřadit podle využití RAM nebo CPU.

Freelo - Nástroj na řízení úkolů a projektů

Přidej se, pozvi svůj tým a klienty, rozděl práci a sleduj, jak se úkoly dají do pohybu.

Dokážete tak lépe určit, které procesy/aplikace požírají nejvíce z operační paměti a nechat si je seřadit od největších “požíračů”.

Výpis běžících procesů na serveru

Dole máte akční lištu a pomocí kláves F1 až F10 můžete provádět různé akce. Rozebereme si všechny.

F1 – Help

Zde najdete všechny informace k ostatním “F” a jak se v HTOP orientovat. Je to velice podobné Midnight Commanderu, kde můžete využívat šipky a myš.

F2 – Setup

Celý panel si můžete přizpůsobit a upravit podle sebe. Ať už se jedná o přidání či odebrání parametrů do sloupce anebo v jaké barvě se to má zobrazovat.

Celou tabulku si můžete přizpůsobit

F3 – Search

Napíšete jméno procesu, který hledáte a ten se žlutě zvýrazní a pomocí klávesy F3 přeskočíte na další stejnojmenný proces.

F4 – Filter

Má stejnou funkci jako “Search”, ale místo zvýraznění jednotlivého procesu všechny se stejným názvem vyfiltruje, takže vidíte pouze tyto procesy.

F5 – Tree

Velice užitečná funkce se skrývá pod klávesou F5, která všechny procesy rozvětví podle toho, jak jsou na sobě vázaný. Pomocí F5 vrátíte procesy do původního stavu.

F6 – SortBy

Můžete si všechny procesy seřadit podle toho, jak využívají CPU, RAM anebo podle uživatele či priority.

F7 – Nice- F8 – Nice+

Po kliknutí na jednotlivý proces můžete pomocí klávesnice F7 snížit o jeden bod prioritu anebo pomocí F8 naopak navýšit.

F9 – Kill

Pokud proces zlobí anebo bere dost prostředků, tak po vybrání procesu a stisknutí F9 můžete procesu vyslat signál, kterým ho ukončíte. Jedná se o signal 15 – SIGTERM anebo 9 – SIGKILL.

A nakonec pomocí klávesnice F10 htop ukončíte.

Munin

Dobré je mít přehled i o dlouhodobé výkonnosti RAM a CPU. Na našich serverech s VPS Centrem máte předinstalovaný monitorovací nástroj Munin, který právě s tímhle problémem pomůže.

Už jsme o něm několikrát psali, ale opakování je matka moudrosti. 🙂

Na screenshotu uvidíte využití RAM ve všech intervalech.

Vytížení RAM v Muninu

Největší výhoda je, že si můžete grafy zobrazit v denním, týdenním anebo ročním rozsahu. Zjistíte tak, kdy se začala zvětšovat zátěž a lépe identifikujete problém.

Diagnostika RAM

V prvním screenshotu vidíme, že se serveru dostává dostatku RAM, protože tam nikde nevidíme červenou línii, kterou je označováno právě ukládání procesů z operační pamětí na odkládaci disk. Taky vidíme, že spousty operační paměti si bere cache/buffers (modrá a fialová barva). Server si tedy ukládá procesy a soubory do RAM, tak aby zrychlil běh systému, když budou znova potřebovat.

Spousta lidí, ale neví, že jakmile serveru dochází operační pamět, tak první čeho se zbavuje, je právě cache a buffers, tak aby pro nové procesy uvolnil místo. Takže jakmile příjde větší zátěž, server automaticky uvolní operační pamět, tak aby dokázal pokrýt poptávku. Může si i dočasně šáhnout do SWAPu, protože nestihne všechno uvolnit. Když tedy uvidíte, že si server šáhnul do SWAPu, ale další dny už na něj nešáhnul, tak to je dobré znamení a nemusíte RAM navyšovat.

Cache i Buffery se z RAM vymažou také po každém restartu serveru. Takže můžete server restartovat a hned se podívat, kolik spotřebovává RAM, než se „zaplní“ cache a buffery.

Teď se pojďme podívat na ten horší případ.

Na svůj server jsem instaloval Elasticsearch, a hned vidíte tu změnu. V operační paměti se okamžitě vyprázdnila cache + buffers, naskočila tam červená linie, který ukazuje, že operační pamět nestíhá, a aby pokryla poptávku, tak využivá SWAP. Nejedná se o jednorázový problém, protože je vidět, že nároky neubývají a RAM si dlouhodobě šahá na odkládací prostor a tím pádem zpomaluje celý systém.

V tomto případě je dobré navýšit RAM min. o 1GB. To můžete provést rovnou ze zákaznického centra a do 15 minut je hotovo.

Takhle vypadá zobrazení CPU.

Vytížení CPU v Muninu

Vmstat

Vmstat je vestavěný nástroj pro monitorování systému Linux. Jeho primární úlohou je měření využití virtuální paměti systémem.

Co je to SWAP in/out?

Když načtete soubor nebo program, soubor se uloží do paměti RAM, protože RAM je konečná, některé soubory se na ni nevejdou. Tyto soubory jsou uloženy ve speciální části pevného disku, která se nazývá „SWAP“.

Swapping je mechanismus, ve kterém lze dočasně vyměnit proces z paměti do záložního úložiště (Swap OUt) a poté jej přivést zpět do paměti pro další provádění (Swap In). Pokud systém (řekněme jeden proces) potřebuje více paměťových prostředků a paměť RAM je plná, tak se přesune do SWAPu (swap out) a tyto neaktivní stránky se přenesou zpět do operační paměti, jakmile se uvolní (swap in).

Když dojde k výměně, výkon systému drasticky poklesne. Je to proto, že rychlost  I / O serveru je mnohem pomalejší než RAM, i když se hardware – například rychlý SSD – používá pro virtuální paměť. Když navíc Linux používá virtuální paměť, utrácí více svých cyklů CPU za swapping virtuální paměti.

To znamená, že administrátoři musí věnovat pozornost využití paměti serveru. Nikdo nechce, aby systém zpomalil. Virtuální paměť má velký vliv na výkon systému, proto je vmstat nezbytný pro její sledování. Kromě monitorování virtuální paměti vmstat měří také plánování procesů, I / O a CPU.

Jak používat vmstat?

Pro spuštění vmstatu se připojte na SSH. Když spustíte vmstat bez jakýchkoli parametrů, zobrazí systémové hodnoty na základě průměrů pro každý prvek od posledního restartu serveru. Tyto výsledky nepředstavují snímek aktuálních hodnot. Spusťte vmstat pomocí následujícího příkazu:

vmstat

A uvidíte tento výstup:

Všimněte si, jak vmstat vrací informace o procesech systému, paměti, swap in/out, systémových přerušeních (system/in) a kontextových přepínačích (system/cs) a CPU. Chcete-li se dozvědět více o každém sloupci a hodnotě, zobrazte man pages vmstat vydáním příkazu man vmstat a vyhledáním každé konkrétní oblasti. Například když prohlížíte stránky manuálu vmstat, chcete-li zobrazit více informací o sloupci swap, zadejte příkaz /swap.

Syntaxe vmstat je následující:

vmstat [options]  [delay]  [count]
  • [options] – možnosti nastavění příkazu vmstat např. vmstat -S mb (zobraz výstup v MB)
  • [delay] – časový interval mezi aktualizacemi. Pokud není zadáno žádné zpoždění, výstup se zobrazí jako průměr od posledního restartu.
  • [count] – počet aktualizací vytištěných po daném intervalu zpoždění.

Můžete například vydat následující příkaz, který vmstat aktualizuje každých 5 vteřin a celkový počet aktualizací bude 7.

vmstat 5 7

A takhle bude vypadat výstup:

Jak interpretovat výstup vmstat?

Výstupy vmstat popisují aktuální stav systému Linux. Informace týkající se provozního stavu systému jsou užitečné při diagnostice problémů souvisejících s výkonem.

Sloupec procs

Hlásí počet zpracovatelských úloh čekajících na spuštění a umožňují vám určit, zda existují procesy, které „blokují“ bezproblémový běh vašeho systému.

Sloupec r zobrazuje celkový počet procesů čekajících na přístup k procesoru. Sloupec b zobrazuje celkový počet procesů ve stavu „spánku“.

Tyto hodnoty jsou často 0. Pokud ne, už víte, kde můžete hledat problém.

Sloupec memory

Informace zobrazené v sekci paměti poskytují stejná data o využití paměti jako příkaz free -m.

Sloupec swapd nebo „swapped“ uvádí, kolik paměti bylo převedeno na swapový soubor nebo disk. Free sloupec uvádí množství nepřidělené paměti. Sloupec buff nebo „buffers“ uvádí množství alokované paměti v provozu. Sloupec cache uvádí množství paměti, které lze v případě potřeby uvolnit pro jinou úlohu.

Sloupec swap

Swapovací část hlásí rychlost, kterou je paměť odeslána nebo načtena z odkládacího uložiště. Díky hlášení „swapování“ odděleně od celkové aktivity disku vám vmstat umožňuje určit, kolik aktivity disku souvisí s odkládacím (swap) systémem.

Sloupec SI (swap in) uvádí množství paměti, které je přesunuto ze swapu do „skutečné“ paměti za sekundu. Sloupec SO (swap out) uvádí množství paměti, které je přesunuto do swapu ze „skutečné“ paměti za sekundu.

Sloupec I/O

Sekce I/O hlásí množství vstupní a výstupní aktivity za sekundu, pokud jde o přečtené bloky a zapsané bloky.

Sloupec BI uvádí počet přijatých bloků neboli „bloků“ z disku za sekundu. Sloupec BO hlásí počet odeslaných bloků neboli „blokování“ na disk za sekundu.

Sloupec System

Sekce systému hlásí data, která odrážejí počet operací systému za sekundu.

Sloupec IN uvádí počet systémových přerušení za sekundu, včetně přerušení systémových hodin. Sloupec CS (context switch) uvádí počet kontextových přepínačů, které systém provede za účelem zpracování všech úkolů.

Sloupec CPU

Sekce CPU informuje o využití zdrojů CPU systému. Sloupce v této části se vždy zobrazují od 0 do 100 a odrážejí „procento dostupného času“.

  • Sloupec US uvádí množství času, které procesor tráví úkoly uživatele nebo nad všemi procesy, které nesouvísí s jádrem Linuxu (kernelem).
  • Sloupec SY uvádí dobu, kterou procesor tráví úkoly souvisejícími s jádrem kernelu.
  • Sloupec ID udává dobu, kterou je procesor nečinný
  • Sloupec WA uvádí dobu, kterou procesor stráví čekáním na dokončení operací I/O, než bude moci pokračovat ve zpracování úloh.

Kdy začíná u RAM problém?

Nejdříve se podíváme, jak může vypadat zdravý linux systém i když se to na první pohled nemusí zdát.

  • free – je blízko 0
  • used – je blízko k total
  • available – (taky free + buffers/cache) má dostatek místa ( dohromady +20%)
  • swap used – nemění se

Příkaz: free G

Varovné signály, které způsobují problém z pamětí:

  • available (free + buffers/cache) – je blízko 0
  • swap used – začíná se zvětšovat
  • dmsg | grep oom-killer – ukončí “zabijaka” paměti

Jak promazat cache a SWAP v Linuxu?

Linux nám dává možnost nechat promazat cache i SWAP, tak se ně pojďme podívat.

SWAP

Pokud systém uloží něco do SWAPU, tak se systém stává strašně pomalým a jakmile vyřešíte problém s nedostatkem RAM, tak můžete pročistit SWAP pomocí:

swapoff -a && swapon -a

A během pár vteřin je uložená paměť pryč.

Cache

PageCache only

tento příkaz pročistí na disku PageCache only bez toho aniž, by ohrozil aplikace nebo služby.

sync; echo 1 > /proc/sys/vm/drop_caches

Jakmile cache pročistíte, tak na pár vteřin se server zpomalí a následně všechny další dotazy půjdou už přímo na disk.

Ramdisk

Můžeme si vytvořit i tzv. RAMDISK neboli složku do které můžeme ukládat často používané soubory.

Vytvoříme složku.

mkdir /mnt/ramdisk

Pomocí příkazu “mount” vytvoříme ramdisk.

mount -t (TYPE) -o size=(SIZE) (FSTYPE) (MOUNTPOINT)

vysvětlení atributu:

(TYPE) – je typ, který využijeme pro RAM disk. Buď tmpfs or ramfs

(SIZE) – velikost, kterou bude ramdisk mít.

(FSTYPE) – file storage kterou bude RAM disk používat. Buď tmpfs, ramfs, ext4 apod.

Konkrétní příklad:

mount -t tmpfs -o size=512m tmpfs /mnt/ramdisk

Jsem tedy můžete ukládat soubory, které se často používají. Nejlepším kandidátem může být složka cache ve WP, nebo složka se sessions. Záleží opravdu případ od případu, co se vám bude hodit nejvíce. Nezapomeňte, že každý soubor zde zabere 4kB a je nutné se pak zamyslet nad pravidelném čištění, nejlépe pomocí aut. skriptu.

Na našich serverech máte podobný skript připravený po přihlášení na SSH ve složce /bin/php_sessions_clean.sh

Pokud vás zajímá tahle problematika více můžete ještě experimentovat a ověřit si nabité know-how na vlastním serveru.

Vyzkoušet zdarma VPS

Zdroje

Zůstaňte s námi v kontaktu

Jednou za měsíc posíláme souhrn novinek. Nemusíte se bát, spam neposíláme a odhlásit se můžete kdykoliv...

Karel Dytrych
Tým Váš Hosting
Vyzkoušejte náš trial na týden zdarma

Garance 14denní záruky vrácení peněz

Vyzkoušejte server na týden zdarma

Vyzkoušet server