Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Ilhvm 06. 11. 2012, 12:44:30
-
Zdravím,
existuje nějaký samostatný příkaz na zjištění využití procesoru a paměti? Mám za úkol vytvořit skript, který bude sledovat průměrné zatížení prostředků a v případě překročení hodnot se objeví upozornění. Vím, že existuje příkaz top, ale vůbec mě nenapadá, jak by se s tím dal realizovat takovýto skript.
Děkuji za každou pomoc :)
-
Skript může třeba spustit příkaz top a monitorovat hodnoty u všech procesů, sčítat je a v případě, že součet překročí hranici, ukáže se upozornění.
-
OT: ja jen ze neco podobneho docela dobre dela "monit". Krom mnozstvi jinich veci (treba dostupnost sluzeb) dovede monitorovat cpu, pamet, disk, i/o, atd. a po prekroceni limitu poslat upozorneni, nebo vykonat jinou akci...
-
Pokud chceš vyloženě vlastní řešení, tak je asi nejjednodušší to číst z /proc.
Tedy např. /proc/loadavg, /proc/meminfo, /proc/diskstats atd.
-
craftext: Dobře, znamená to teda, že můžu přistupovat k jednotlivým sloupečkům? Jakože myslím tím, že když se mi vypíše příkazem top využití, tak můžu samostatně pracovat například se sloupečkem %CPU? A udělat tedy cyklus, který mi spočítá sumu hodnot v něm obsažených?
Rhinox: Děkuju, jen nevím co bude pro mě jednoduší na zpracování :))
-
top ti hodí znaky(sloupečky), a ty můžeš najít určitou pozici v nich a podle toho určit součet zátěže všech procesů
-
Od osmého řádku výstupu začínají procesy. Od určitých znaků na každém řádku začíná údaj o vytížení procesoru(v procentech). Konkrétní znak se dá poznat podle toho, že je to 9. mezerou oddělené slovo nebo číslo na řádku. Jeho konec se dá poznat podle mezery.
-
tadeas: Dobře, já vyzkouším všechno a vyberu co mi bude nejlépe vyhovovat, mimochodem, někde se píše, že /proc/loadavg není přímo vytížení procesoru ...
Rhodix: No, na internetu jsem našla příkaz - top -b -n 1 | awk '/Cpu\(s\)/ {print $2}' - no a vypisuje mi to, řekla bych, že využití procesoru celkově, je to možné?
-
Myslím, že to možné je. Příkaz dělá pravděpodobně to co jsem popisoval v minulých příspěvcích.
-
Výborně, tak jo děkuju :)
-
Já teda nevím....pokaždé mi to háže jen 13,9.... :(
-
Teď už 13,8......funguje to! :D
-
tadeas: Dobře, já vyzkouším všechno a vyberu co mi bude nejlépe vyhovovat, mimochodem, někde se píše, že /proc/loadavg není přímo vytížení procesoru ...
To je pravda, neni. :)
Teď už 13,8......funguje to! :D
Urcite? Me i kdyz zatizim procesor tak top pri -n1 ukaze nejake male cisla, ale -n2 uz je v pohode, tzn. neco takoveho me funguje uplne v pohode:
top -b -n2 | grep %Cpu | tail -n1 | awk '{print $2+$4+$6+$10+$12+$14+$16"%"}'
-
tadeas: Dobře, já vyzkouším všechno a vyberu co mi bude nejlépe vyhovovat, mimochodem, někde se píše, že /proc/loadavg není přímo vytížení procesoru ...
To je pravda, neni. :)
Teď už 13,8......funguje to! :D
Urcite? Me i kdyz zatizim procesor tak top pri -n1 ukaze nejake male cisla, ale -n2 uz je v pohode, tzn. neco takoveho me funguje uplne v pohode:
top -b -n2 | grep %Cpu | tail -n1 | awk '{print $2+$4+$6+$10+$12+$14+$16"%"}'
Máš pravdu, toto funguje dobře. Normálně mám 8% a po spuštění VM ve VirtualBoxu stoupá na 60%.
-
Myslím, že atop umí logovat a pak z těch logů udělat i nějaké statistiky.
-
A můžete mi prosím vysvětlit co dělá: top -b -n2 | grep %Cpu | tail -n1 | awk '{print $2+$4+$6+$10+$12+$14+$16"%"}', konkrétně teda to v té složené závorce? Je mi jasné, že něco sčítá, ale nevím co :))
A tak samo to teda půjde i u paměti že? Až na to, že místo grep %Cpu napíšu grep %ram nebo jak to tam je ...
-
A můžete mi prosím vysvětlit co dělá: top -b -n2 | grep %Cpu | tail -n1 | awk '{print $2+$4+$6+$10+$12+$14+$16"%"}', konkrétně teda to v té složené závorce? Je mi jasné, že něco sčítá, ale nevím co :))
A tak samo to teda půjde i u paměti že? Až na to, že místo grep %Cpu napíšu grep %ram nebo jak to tam je ...
Awk napred rozdeli radek na jednotlive casti pomoci znaku " " (mezera, jiny se da zvolit pomoci -F) a k tem se potom da dostat pomoci $x, takze kdyz napises treba awk '{print $1}' tak ti to vypise %Cpu(s):
Dalsi veci o awk vi man. :)
Jo jinak jestli to po tobe nechce nekdo ve skole a ma to doopravdy k necemu byt, tak bych radsi zkusil nejake existujici reseni.
-
Super, děkuju moc všem :)
-
Mám ještě jeden problém, mohli byste mi ještě prosím poradit jak to zapsat do toho skriptu? Něco jsem vykutila, ale bude to špatně.
#!/bin/bash/
if [ top -b -n2 | grep %Cpu | tail -n1 >= 100 ];
then echo 'Doslo k prekroceni hodnoty CPU'
fi
if [ top -b -n2 | grep %mem | tail -n1 >= 80 ];
then echo 'Doslo k prekroceni hodnoty RAM'
fi
Nevím jestli je dobře ta podmínka, hlásí mi to tam při spuštění nějaké chyby a pak celkově nevím jak mám poskládat tu podmínku. Ono skriptování nikdy nebylo mou silnou stránkou :))
-
Že to jsou vážně věci do školy? ;-) http://linuxconfig.org/Bash_scripting_Tutorial#10-bash-comparisons (http://linuxconfig.org/Bash_scripting_Tutorial#10-bash-comparisons)
-
Bohužel jsou jsou, to už je úplně poslední věc, kterou mám udělat a nějak jsem se nad tím zasekla a pokud to zvládnu, tak mám zápočet a bude klid :))
-
Takže stačí v podstatě jen vyměnit >= za -eg?
-
Takže stačí v podstatě jen vyměnit >= za -eg?
nestaci, pretoze a) by to malo byt -eq (equals), za b) floaty v bashi nefunguju a to co vyhodi top float je.
k predchadzajucemu postu: prvy riadok bude #!/bin/bash, nie #!/bin/bash/, ale idealne, ak ma byt skript prenositelny, pouzivaniu bash v #! sa vyhni. dalej by som pouzil
if [[ $(bc <<< "$(top -b -n1 | grep ^Cpu | awk -F': ' '{print $2}' | awk -F% '{print $1}') >= 100") -eq 1 ]] ; then echo 'Doslo k prekroceni hodnoty CPU'; fi
tail je zbytocny, ak sa pouzije top -n1. Takze riesenie mas, este mi dodatocne vysvetli kazdy jeden prikaz, ok? ;)
-
videl som prvy post - za aku dobu sa maju pocitat tie priemery? 5 sekund? hodina? 2 roky? to este dost zmeni vysledok ;)
-
Doba není určena, takže já to prostě beru tak, že když uživatel skript spustí tak se sleduje vytížení v tom čase.
Jinak teda se vykoná příkaz top, který ukáže vytížení, tam se najde řetezec cpu a tomu awk moc nerozumím, vím že hledá nějaké řádky, pipa je pak spojuje, celý ten top pak "převedeme" na float, no a těm procentům a stříškám moc nerozumím.
-
tail je zbytocny, ak sa pouzije top -n1. Takze riesenie mas, este mi dodatocne vysvetli kazdy jeden prikaz, ok? ;)
tadeas: Dobře, já vyzkouším všechno a vyberu co mi bude nejlépe vyhovovat, mimochodem, někde se píše, že /proc/loadavg není přímo vytížení procesoru ...
To je pravda, neni. :)
Teď už 13,8......funguje to! :D
Urcite? Me i kdyz zatizim procesor tak top pri -n1 ukaze nejake male cisla, ale -n2 uz je v pohode, tzn. neco takoveho me funguje uplne v pohode:
top -b -n2 | grep %Cpu | tail -n1 | awk '{print $2+$4+$6+$10+$12+$14+$16"%"}'
Máš pravdu, toto funguje dobře. Normálně mám 8% a po spuštění VM ve VirtualBoxu stoupá na 60%.
-
Doba není určena, takže já to prostě beru tak, že když uživatel skript spustí tak se sleduje vytížení v tom čase.
Jinak teda se vykoná příkaz top, který ukáže vytížení, tam se najde řetezec cpu a tomu awk moc nerozumím, vím že hledá nějaké řádky, pipa je pak spojuje, celý ten top pak "převedeme" na float, no a těm procentům a stříškám moc nerozumím.
Striska u toho grepu znamena ze vyrazem "Cpu" musi zacinat radka, nestaci aby byl treba nekde uprostred (takze jestli nema nejakou divnou verzi grepu tak tam patri spis "^%Cpu"), kdyby te to nahodou zaujalo tak staci googlit regexp. :P
-
Dobře děkuju a to wk dělá co? Hledám na internetu, vysvětleno to jakš takš je, ale já to nechápu. A jelikož budu muset vypsat ještě paměť tak by se to i hodilo :))
-
Dobře děkuju a to wk dělá co? Hledám na internetu, vysvětleno to jakš takš je, ale já to nechápu. A jelikož budu muset vypsat ještě paměť tak by se to i hodilo :))
Awk je scriptovaci jazyk, co v nem naprogramujes to udela...
-
Výborně, a teda u toho mého případu awk '{print $2+$4+$6+$10+$12+$14+$16"%"}' sčítá co? řádky? a proč vždy ob dva?
-
Prosíím, odpovězte mi kdokoliv, potřebuju to nutně