Řešili jste někdy co vlastně znamenají 3 čísla na konci příkazu uptime?
load average: 0,10, 0,09, 0,11

Tyto čísla obecně vyjadřují průměrné zatížení linuxového systemu za období 1, 5 a 15 minut a nezahrnují žádné procesy, čekajicí doby i/o wait na discích nebo síti.
Zjednodušeně se dá říct, že tato čísla zobrazují zatížení, vlivem zatížení CPU procesy, nikoliv tedy jen zatížení přímo CPU. To znamená, že zvyšujicí se zatížení poukazuje pouze na to, že nějaký proces čeká na dokončení předchozího procesu aby mu mohl být přidělen procesorový čas daného procesoru a přitom procesory nemusí vykazovat vůbec vytížení (například u příkazu htop).
Tento jev je nejčastěji způsoben právě dlouhou čekajicí dobou na přístup k disku, přístupu k síťovému rozhraní a nebo jsou prostě jen zatíženy procesory.

Load 3.00 u jedno-jádrového procesoru znamená 300% zatížení systému, u dvou-jádrového procesoru lze předpokládat, že toto zatížení v ideálním případě by bylo poloviční tedy 1.50.
Pokud tedy máme číslo zatížení rovno počtu CPU, můžeme předpokládat, že hardware je v tomto okamžiku na hraně své optimální schopnosti odbavovat procesy v obvyklých časech a nenastává tak rapidní zpomalení systému (můžeme pozorovat při velkém swapování na pomalý disk kdy se zvedne i/o wait time). Lze tedy říci, že v tuto chvíli systém využil svých procesorů „naplno“ a efektivně, ale pokuď takové zatížení je trvalé chtělo by to zvážit posílení hardwaru případně přerozdělení zátěže mezi více serverů.

S těmito informacemi lze napsat skript který průměrný load přepočítá na procenta – (LOAD / POČET CPU) * 100. Pro ukázku přikládám funkční php skript pro linux (Ve windows jsem nenašel alternativu průměrného zatížení za časový usek, pouze okamžité zatížení CPU pomocí php rozšíření COM)

$numcores = 8; //Počet jader CPU
$sys_load = sys_getloadavg(); //Nativni PHP funkce pro linux
$percent = ($sys_load[0] / $numcores) * 100; //Prepocet na procenta, vybereme hodnotu za posledni minutu
 
print sprintf("%0.1f",$percent) . "%".PHP_EOL; //Vypis se zaokrouhlenim na 1 desetinne misto

3 thoughts on “Linux load average – Chápeme hodnoty příkazu uptime

  1. Load je průměrný počet procesů (průměrný za daný čas 1, 5, 15) čekající na běh. Je to průměrná délka fronty procesů To je asi tak nejlepší odpověď.

    Pokud je nějaké zařízení (dočasně) nedostupné, může load vzrůst na stovky a procesor nebude dělat vůbec nic (a procesy budou ve stavu D). Interpretovat to jako zatížení (CPU) 10000% je chybné. Na tom stroji můžou jet ostatní procesy, které nepotřebují dané zařízení, naprosto v pohodě.

    Onen příklad (load 3 = 300% CPU) platí pouze u procesů, kde každý z nich umi vytížit samostatně procesor na 100% a nebude u toho používat žádné zařízení (disk, síť apod.) Například nějaký matematický výpočet. Jinak tato rovnice neplatí.

    „Lze tedy říci, že v tuto chvíli systém využil svých procesorů „naplno“ a efektivně, ale pokuď takové zatížení je trvalé chtělo by to zvážit posílení hardwaru případně přerozdělení zátěže mezi více serverů.“

    Chápu (asi), jak to myslíš, ale tohle též neplatí vždy. Důležitá jsou kritéria na dané procesy (latence, objem zpracovaných dat apod.)

    Load je asi z nejméně užitečných parametrů, které vůbec existují. Bohužel, kdejaký monitorovací systém ho má jako příklad ve výchozím template (s podobně důležitými údaji jako třeba počet připojených uživatelů) a mnoho adminů si myslí, že je to důležité sledovat. Není. Důležité je sledovat to, co ten stroj má za úkol. Tedy např. u webseveru je to například jak rychle dokáže vrátit stránku (latence) nebo kolik jich zvládne za jednotku času, u file serveru kolik dat zvládne protlačit apod. Abstraktní metriky jako load jsou v praxi celkem k ničemu.

    Odpovědet
    • Diky za upresneni. Pri psani clanku jsem akorat resil situaci na serveru kde se pouzil ciste vykon CPU.. Co se tykalo i/o nebo jinych front tak tam byly slusne rezervy a load se prave zvedal ke kriticke hranici 8.00 (pri 8mi jadrech) pres tuto hranici se zacali doby na zpracovani skriptu rapidne zvysovat. Uznavam ze ne vzdycky se da takto pocitat co vlastne load znamena proto jsem se toto snazil prirovnat k tem frontam kdy cpu ceka na „odbaveni“ daneho procesu.
      Nicmene me ted tak napada co se vlastne stane kdyz 8 procesu vytizi kazdy cpu jednotlive prave na necem co musi cekat? Nedojde pak k zatizeni celkove nehlede na to ze ostatni procesy by teoreticky mohli pokracovat?

  2. „Nedojde pak k zatizeni celkove nehlede na to ze ostatni procesy by teoreticky mohli pokracovat?“

    Ne, ty procesy se neustále střídají. Když si na „jednojádře“ spustíte 100 procesů, které by každý z nich běžel na 100%, tak pojedou všechny současně, ale každý pochopitelně na 1% celého výkonu CPU. Ale pojedou. Jádro mezi nimi přepíná (1000x za s, nebo jinak dle nastavení kernelu). Dále se berou v úvahu priority. Pokud má proces větší prioritu, tak se na něj přepíná častěji, nebo na delší čas. Tohle plánování procesu je občas vylepšováno, zrovna teď se do kernelu dostal další plánovač procesů (DEADLINE).

    Takže ani když se nějaký proces „zasekne“ na nedostupném zařízení, tak to pro ostatní procesy nic neznamená. Dokonce si polepší, protože zaseklý proces, vrátí řízení okamžitě zpět, protože nemá co dělat (nevyužije svůj procesorový čas).

    Ani bych tedy do článku nepsal větu: „proces čeká na dokončení předchozího procesu“ Proces čeká akorát na to, až mu kernel poskytne čas procesoru pro běh. Pokud je běžících procesů více, bude čekat (dle priority, kterou má on a kterou mají ostatní) o něco déle, než když procesů pro běh je méně.

    Takže úplně zjednodušeně: jádro má k disposici nějaký počet procesorů a nějaký počet procesů ke spuštění. A spouští jednotlivé procesy na krátký okamžik (1ms) na jednom z procesorů. Úkolem plánovače je jednak využít všechny dostupné procesory a také dostatečně vhodně prostřídat všechny procesy dle priority.

    Odpovědet

Zanechat odpověd

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile=""> 

vyžadováno