Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Ilhvm 06. 11. 2012, 12:44:30

Název: Monitorování zatížení počítače - skript
Přispěvatel: 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  :)
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: craftext 06. 11. 2012, 12:52:47
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í.
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: Rhinox 06. 11. 2012, 12:57:09
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...
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: tadeas 06. 11. 2012, 13:06:17
Pokud chceš vyloženě vlastní řešení, tak je asi nejjednodušší to číst z /proc.

Tedy např. /proc/loadavg, /proc/meminfo, /proc/diskstats atd.
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: Ilhvm 06. 11. 2012, 13:07:43
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í :))
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: craftext 06. 11. 2012, 13:14:40
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ů
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: craftext 06. 11. 2012, 13:20:40
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.
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: Ilhvm 06. 11. 2012, 13:49:37
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é?
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: craftext 06. 11. 2012, 14:57:27
Myslím, že to možné je. Příkaz dělá pravděpodobně to co jsem popisoval v minulých příspěvcích.
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: Ilhvm 06. 11. 2012, 15:30:52
Výborně, tak jo děkuju :)
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: craftext 06. 11. 2012, 15:37:23
Já teda nevím....pokaždé mi to háže jen 13,9.... :(
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: craftext 06. 11. 2012, 15:41:45
Teď už 13,8......funguje to!  :D
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: Jméno: 06. 11. 2012, 20:48:32
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"%"}'
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: craftext 07. 11. 2012, 07:23:49
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%.
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: Mareg 07. 11. 2012, 09:36:48
Myslím, že atop umí logovat a pak z těch logů udělat i nějaké statistiky.
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: Ilhvm 07. 11. 2012, 18:11:58
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 ...
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: Jméno: 08. 11. 2012, 13:29:57
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.
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: Ilhvm 09. 11. 2012, 09:39:48
Super, děkuju moc všem :)
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: Ilhvm 21. 11. 2012, 10:57:17
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 :))
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: Zopper 21. 11. 2012, 11:31:35
Ž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)
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: Ilhvm 21. 11. 2012, 11:35:33
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 :))
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: Ilhvm 21. 11. 2012, 11:49:19
Takže stačí v podstatě jen vyměnit >= za -eg?
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: bw 21. 11. 2012, 12:13:53
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? ;)
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: bw 21. 11. 2012, 12:15:38
videl som prvy post - za aku dobu sa maju pocitat tie priemery? 5 sekund? hodina? 2 roky? to este dost zmeni vysledok ;)
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: Ilhvm 21. 11. 2012, 13:06:39
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.
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: Jméno: 24. 11. 2012, 23:03:22
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%.

Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: Jméno: 24. 11. 2012, 23:15:15
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
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: Ilhvm 25. 11. 2012, 18:59:51
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 :))
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: Jméno: 26. 11. 2012, 00:15:58
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...
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: Ilhvm 26. 11. 2012, 10:24:01
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?
Název: Re:Monitorování zatížení počítače - skript
Přispěvatel: Ilhvm 27. 11. 2012, 20:53:53
Prosíím, odpovězte mi kdokoliv, potřebuju to nutně