Portál AbcLinuxu, 10. května 2025 08:44

Dotaz: Monitorovanie kratkych procesov

Tombik avatar 16.5.2012 09:52 Tombik | skóre: 12
Monitorovanie kratkych procesov
Přečteno: 201×
Odpovědět | Admin
Potrebujem monitorovat php-cgi procesy, ktore sa spustaju pod jednotlivym uzivatelom vzdy ked niekto nacitava jeho web. Tieto procesy vacsinov rychlo vzniknu vytvoria nejaky kratkodoby CPU load (samozrejme zoberu aj RAM...) a potom zaniknu.

Potrebujem, aby napriklad kazdych 10 minut mi skript spravil report o tom kolko php-cgi procesov, ktorych uzivatelov bolo behom tychto 10 minut spustane a aky vytvorili CPU load. Da sa nejako spravit, ze vzdy ked vznikne novy php-cgi proces tak to zaroven spusti nejaky moj skript? Alebo ako inac by som mohol postupovat?

Za kazdy napad budem velmi vdacny. Skusal som hladat rozne monitorovacie nastroje, ale na moj ucel som nic nenasiel. Mam naprogramovane nieco vlastne, ale to len kontroluje aktualny CPU load vzdy ked sa skript spusti z cronu. Jednoducho parsuje data z ps. Toto samozrejme nestaci.

Dakujem

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

16.5.2012 10:03 jkhkjhkhj
Rozbalit Rozbalit vše Re: Monitorovanie kratkych procesov
Odpovědět | | Sbalit | Link | Blokovat | Admin
http://www.gnu.org/software/acct/
Řešení 1× (Tombik (tazatel))
16.5.2012 10:41 chochi | skóre: 29 | Praha
Rozbalit Rozbalit vše Re: Monitorovanie kratkych procesov
Odpovědět | | Sbalit | Link | Blokovat | Admin
Na to asi byl nejvhodnejsi SystemTap. Inspirovat se lze napr v prikladech. Pro zacatek napr process/forktracker.stp, process/pstrace_exec.stp. Pak lze nastavit dalsi skript ktery se povesi na vystup SystemTapu a reaguje na udalosti.
Pri konci procesu pak nejak zjistit kolik zabral casu (neco jako je v /proc/[pid]/stat - to by SystemTap mohl taky umet, ale je to na delsi zkoumani. Highlevel bych to videl takhle - v kprocess.exec_complete si vyfiltrovat a zapamatovat potrebne procesy (vcetene casu startu); v kprocess.exit zjistit zda konci zapamatovany proces, zjistit jeho utime a vypsat ho spolecne s rozdilem od casu kprocess.exec_complete - tim se pak da toho dost zjistit.
Jelikoz to je povesene na vytvareni / ruseni procesu tak by to snad ani nemuselo brat tolik vykonu.
Docela zajimave vypada tohle http://people.redhat.com/berrange/systemtap/process-files/process-files.stap
Tombik avatar 16.5.2012 11:56 Tombik | skóre: 12
Rozbalit Rozbalit vše Re: Monitorovanie kratkych procesov
Diky za odpoved idem sa na to pozriet a vyskusat to.
Řešení 1× (Tombik (tazatel))
16.5.2012 12:05 chochi | skóre: 29 | Praha
Rozbalit Rozbalit vše Re: Monitorovanie kratkych procesov
Coz takhle: process-files.stap:
global pids

function get_usertime:long() %{
  THIS->__retvalue = current->utime + current->signal->utime;
%}

function proc:string() {
  return sprintf("%d (%s)", pid(), execname())
}

probe syscall.fork.return {
  printf("%s fork   : %d\n", proc(), $return)
}

probe syscall.execve {
  printf("%s execve :%s\n",proc(), kernel_string($filename))
  pids[pid()] = gettimeofday_ms()
}


probe syscall.exit {
  if (pids[pid()] != 0) {
    printf("%s exit  : utime=%d rtime=%d\n", proc(), get_usertime(), gettimeofday_ms() - pids[pid()])
    pids[pid()] = 0
  } else {
    printf("%s exit  : utime=%d rtime=unknown\n", proc(), get_usertime())
  }
}
Spusteni: stap process-files.stap -g Priklad vystupu:
14 (kthread) fork   : 7686
7686 (kstopmachine) exit  : utime=0 rtime=unknown
14 (kthread) fork   : 7687
7687 (kstopmachine) exit  : utime=0 rtime=unknown
14 (kthread) fork   : 7688
7688 (kstopmachine) exit  : utime=0 rtime=unknown
7668 (bash) exit  : utime=4919 rtime=unknown
6426 (bash) fork   : 7689
7689 (bash) execve :/bin/cat
7689 (cat) exit  : utime=0 rtime=1912
6426 (bash) fork   : 7690
7690 (bash) execve :/bin/bash
7690 (bash) exit  : utime=3680 rtime=3341
7680 (stapio) exit  : utime=0 rtime=unknown
Kde utime je klasicky user time a rtime je real-time (celkovy cas behu programu). Neni problem pridelat system-time. Procesy s rtime=unknown byl spusteni pred zacatkem behu skriptu.
Napr cat bezel 1912ms a spotreboval 0ms, tudiz prumerne vytezoval procesor na 0% po dobu 1912ms; bash bezel 3341ms a spotreboval 3680ms, tudiz prumerne vytezoval procesor na 100% po dobu 3341ms (tady netusim proc rtime < utime, ale tech par ms pujde snad zanedbat)
Tombik avatar 16.5.2012 13:26 Tombik | skóre: 12
Rozbalit Rozbalit vše Re: Monitorovanie kratkych procesov
Diky toto presne vyzera ako to co potrebujem. Idem s tym dalej experimentovat :)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.