jak se skutečné Průměrné Zatížení CPU na Linuxu
Linux Průměrné Zatížení je stejně starý jako svět, a o tom, jak matoucí, jako několik inženýři mohou i ti, co to opravdu je, nebo jak je to vypočítané.,
Naštěstí, Brendon Gregg má velký přehled, včetně jeho historie, na Linux Průměry Zatížení: Řešení Záhady, kde můžete vidět základní problém:
Linux Průměrné Zatížení zahrnuje I/O
To je tak jednoduché, jak to. Na rozdíl od všech ostatních unixových systémů (Solaris, AIX atd.), Linux počítá jak běžící / runnable procesy, tak blokované (nepřerušitelné) procesy, které obvykle čekají na I/o.to je špatná věc a datuje se k archaické 24leté náplasti, kterou Brendon našel.
proč se staráme?,
staráme se o to, že na jakémkoli smíšeném systému (pomocí CPU I I/O) je výsledný průměr zatížení vysoce variabilní a často zbytečný. To může být obzvláště špatné u vysoce závitových systémů, které mohou způsobit I/O, takže je snadné mít desítky nebo stovky blokovaných na pomalých discích.
to, Co většina z nás opravdu chci, je tradiční Unix míra Zatížení Průměr, což je průměrný počet runnable procesů v průměru v průběhu času. To nám říká, jak je náš systém načten, a můžeme se na frontu podívat jako na míru nasycení, tj., nepřetržitá fronta CPU znamená, že jsme přetíženi.
tak, jak to můžeme získat?
opravdu chceme délku fronty běh CPU, která se stává > 0, když procesy musí čekat na CPU. Ale je těžké se dostat přesně a Linuxové jádro není v této oblasti příliš přátelské.
nejprve to, co lidé Linuxu nazývají frontou run, zahrnuje spuštěné úkoly, takže to není opravdu fronta, ale fronta plus to, co běží. To je matoucí, a proto musíte odečíst počet procesorů, abyste získali pocit skutečné fronty.,
několik nástrojů může získat aktuální okamžitou velikost fronty běhu. To je to, co ukazuje sloupec vmstat „r“ a „sar-q“; oba to získají z metriky procs_running /proc/stat.
problém je, že se jedná o okamžitý počet, takže je velmi hlučný a musí být zprůměrován, aby získal užitečná data, ale jádro to pro vás neudělá. V ideálním případě by byl výstup jádra v / proc pouze pro CPU a I / O pouze průměry zatížení, ale nikdo to ještě nevytvořil.,
takže potřebujeme nástroj, který se pokusí emulovat, jak funguje průměr zatížení, rychlým vzorkováním této velikosti fronty okamžitého spuštění a průměrováním v průběhu času.
Představujeme runqstat
runqstat to dělá — to je jednoduchý nástroj příkazového řádku napsaný v Go, že ve výchozím nastavení vzorky této velikosti fronty každých 10ms a průměry to přes jednu sekundu. Cílem je stabilní a přesné měření toho, jak je systém zaneprázdněn.,
obsahuje možnosti pro změnu vzorkovací frekvence a průměrování času, plus odečíst počet procesorů, takže si můžete jen vidět skutečnou velikost fronty, pokud chcete.
má také možnost vypočítat průměrný blokovaný počet, který teoreticky můžete odečíst od průměru zatížení, abyste získali jiný pohled na saturaci CPU (a zjistit, kolik problémů způsobuje průměr zatížení).
s tímto nástrojem mají týmy ops konečně dobrý způsob, jak sledovat saturaci svých Linuxových serverů.
najděte ji na Github-runqstat