[linux] Totaal CPU usage in %

Pagina: 1
Acties:
  • 141 views sinds 30-01-2008
  • Reageer

  • WoRsTeNBoY
  • Registratie: Januari 2005
  • Laatst online: 21-01-2024
Ik zou graag de totale cpu load in % krijgen in een nummer van 0 - 100 (uiteraard :) )

ik ben hier al een half uurtje aant zoeken en kan maar niets vinden,

ik zou deze waarde gebruiken voor mrtg, (het gaat met snmp maar die gebruik ik niet en dat wens ik zo te houden).

Het moet te berekenen zijn want top geeft het wel weer, maar dit kan ik niet met enig awk werk verkrijgen.

Groetjes

  • HunterPro
  • Registratie: Juni 2001
  • Niet online
cpu usage zegt niet zoveel - je kan beter naar load kijken imo. Nou weet ik niet precies hoe die twee van elkaar afhangen, maar ik ga er altijd vanuit dat zodra load < 1, load*100 de cpuload in % weergeeft (bij benadering). Maar omdat load ook >1 kan zijn, is dat eigenlijk niet zinnig. De stat is imo ook niet zoveel waard - je kunt uit load-info meer info halen dan een cpu-load-metertje.

  • M-ThijZ
  • Registratie: Maart 2003
  • Laatst online: 06:36

M-ThijZ

Riding on Rails

Als je wilt weten hoe intensief je cpu gebruikt wordt kun je het beste naar de system loads kijken.

Wat hunterpro dus ook al zei

Deze 'load' waarden staan in /proc/loadavg.

Bash:
1
2
3
4
5
6
7
8
5min. avg. load:
cat /proc/loadavg | awk '{ print $1 }'

10min. avg. load:
cat /proc/loadavg | awk '{ print $2 }'

15min. avg. load:
cat /proc/loadavg | awk '{ print $3 }'


Voor een grafiek voor mrtg lijkt me dat de 5 min. average voldoende is.

[ Voor 77% gewijzigd door M-ThijZ op 15-12-2005 01:51 ]


  • Coen Rosdorff
  • Registratie: Januari 2000
  • Niet online
Load zegt niet per definitie iets over je cpu belasting.

CPU belasting kan je halen uit /proc/stat.
code:
1
cpu0 136748514 82123017 112780356 1079582667
man proc:
code:
1
2
3
4
5
cpu  3357 0 4313 1362393
     The  number  of  jiffies  (1/100ths of a second) that the system spent in
     user mode, user mode with low priority (nice), system mode, and the idle
     task, respectively.  The last value should be 100 times the second
     entry in the uptime pseudo-file.

Als je dus na 1 seconde weer je laatste teller uitleest, en die is 20 hoger, dan was de gemiddelde cpu belasting in de laatste seconde 80%.

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Of je gebruikt iostat :)

  • Berik
  • Registratie: Oktober 2002
  • Laatst online: 05-12-2023
tik in een terminal "top" in en je krijgt allemaal info te zien.
oa de cpu-usage, memory-usage, load, uptime, processen

  • Lethalis
  • Registratie: April 2002
  • Niet online

Ask yourself if you are happy and then you cease to be.


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Berik schreef op donderdag 15 december 2005 @ 09:33:
tik in een terminal "top" in en je krijgt allemaal info te zien.
oa de cpu-usage, memory-usage, load, uptime, processen
--->
Het moet te berekenen zijn want top geeft het wel weer, maar dit kan ik niet met enig awk werk verkrijgen.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Met top kan het ook prima hoor, dat is amper meer werk dan sar of iostat.

  • Wilke
  • Registratie: December 2000
  • Laatst online: 08-02 22:25
Je topictitel zegt 'cpu usage', je startpost 'load'. Dat zijn 2 compleet verschillende dingen. Welke bedoel je?

  • M-ThijZ
  • Registratie: Maart 2003
  • Laatst online: 06:36

M-ThijZ

Riding on Rails

little_soundman schreef op donderdag 15 december 2005 @ 02:12:
Load zegt niet per definitie iets over je cpu belasting.

CPU belasting kan je halen uit /proc/stat.
code:
1
cpu0 136748514 82123017 112780356 1079582667
man proc:
code:
1
2
3
4
5
cpu  3357 0 4313 1362393
     The  number  of  jiffies  (1/100ths of a second) that the system spent in
     user mode, user mode with low priority (nice), system mode, and the idle
     task, respectively.  The last value should be 100 times the second
     entry in the uptime pseudo-file.

Als je dus na 1 seconde weer je laatste teller uitleest, en die is 20 hoger, dan was de gemiddelde cpu belasting in de laatste seconde 80%.
Kijk dat is handige info, dat wist ik nog niet.
bedankt.

  • Wilke
  • Registratie: December 2000
  • Laatst online: 08-02 22:25

  • Oezie Woezie
  • Registratie: December 1999
  • Niet online

Oezie Woezie

Pim. is de beste

M-ThijZ schreef op donderdag 15 december 2005 @ 15:17:
[...]

Kijk dat is handige info, dat wist ik nog niet.
bedankt.
en als je in de source kijkt(man page is een beetje oud heb ik het idee) worden er tegenwoordig 8 variabelen geprint.
code:
1
2
3
4
5
6
7
8
9
10
11
cputime64_t user, nice, system, idle, iowait, irq, softirq, steal;

    seq_printf(p, "cpu  %llu %llu %llu %llu %llu %llu %llu %llu\n",
        (unsigned long long)cputime64_to_clock_t(user),
        (unsigned long long)cputime64_to_clock_t(nice),
        (unsigned long long)cputime64_to_clock_t(system),
        (unsigned long long)cputime64_to_clock_t(idle),
        (unsigned long long)cputime64_to_clock_t(iowait),
        (unsigned long long)cputime64_to_clock_t(irq),
        (unsigned long long)cputime64_to_clock_t(softirq),
        (unsigned long long)cputime64_to_clock_t(steal));


deze kunnen makkelijk met een regex en perl uit gelezen worden. aangezien het 64bit counters zijn kun je deze direct aan mrtg of rrdtool voeren. die maakt er dan gelijk het gemiddelde van de periode(stepsize). moet je alleen even oppassen bij een reboot, dat je geen rare pieken krijgt.

ik zelf gebruik snmp voor het vergaren van deze waardes. en dat ziet er hier zo uit.
Afbeeldingslocatie: http://haas.oezie.org/rrd/cpu/haas-week.png

zelfde soort grafiekjes kan je ook voor load maken.
Afbeeldingslocatie: http://haas.oezie.org/rrd/load/haas-week.png

een mooi Tshirt met Pim. is de beste enzo


  • WoRsTeNBoY
  • Registratie: Januari 2005
  • Laatst online: 21-01-2024
dankuwel voor deze interesante antwoorden,
ik zou dus gewoon 100 - idle % kunnen doen? (via sar -u 1)

ook zie ik in die mooie rrd van Oezie Woezie getallen groter dan 100 waar de schaal in % is uitgerdukt :?

even testen hoe dat zit met die jiffies

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Overigens kan je de top output ook best eenvoudig krijgen hoor :)

Als je de -b flag mee geeft dan start top in batch mode waardoor je zo de output met awk kan filteren.

Blog [Stackoverflow] [LinkedIn]


  • WoRsTeNBoY
  • Registratie: Januari 2005
  • Laatst online: 21-01-2024
dat van die load snap ik wel met die timeslices maar daaruit kan je toch niet afleiden of je pc nu onder volledige stress staat?
of zou je de load niet kunnen delen door het aantal processen?

overigens bekom ik devolgende waarden bij :

(none):~ # cat /proc/stat | head -1; sleep 1; cat /proc/stat | head -1
cpu 47303011 972941 7142025 186501873 6915175 859929 2300251
cpu 47303020 972941 7142028 186501954 6915183 859929 2300252


waar ik niet direct inzie hoe ik hiervan een % kan maken :)

[ Voor 45% gewijzigd door WoRsTeNBoY op 15-12-2005 23:37 ]


  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Je moet even (zoals al eerder gevraagd) bedenken en aangeven /wat/ je uit wil drukken, de load, of de cpu-belasting, dat zijn namelijk 2 verschillende dingen.
De cpu-belasting kun je triviaal verkrijgen door de output van top, iostat, sar of iets anders te parsen, dan hoef je niet eens te rekenen (zoals je nu wel lijkt te doen).
De load kun je gewoon uit /usr/bin/uptime halen, of uit /proc/loadavg.
Volgens mij ben je nu nogal ingewikkeld aan het doen :)

  • Coen Rosdorff
  • Registratie: Januari 2000
  • Niet online
cpu belasting voor mrtg/rrd uit iostat wil niet echt handig.
iostat laat namelijk het gemiddelde sinds het opstarten zien. Voor meer actuele getallen moet je het een interval draaien, en dat is onhandig in scripts.

  • WoRsTeNBoY
  • Registratie: Januari 2005
  • Laatst online: 21-01-2024
ik zou graag de cpu-belasting percentueel plotten,
want als ik het dan nu goed doorheb is cpu-load de tijd die een proces moet wachten,
en dit is afhankelijk van de cpu-belasting EN het aantal taken dat naar cpu kracht vragen.

maar ik wil dus de cpu-belasting zien mede omdat ik op piekmomenten van o.a. gameserver wil kijken of de cpu de bottleneck vormt, het aantal slots en bandwidth van de gameserver wordt al geplot.

(sorry voor de onduidelijkheid van mijn kant :) )

  • HunterPro
  • Registratie: Juni 2001
  • Niet online
dan zou ik ook diskload plotten als ik jou was ;)

  • Coen Rosdorff
  • Registratie: Januari 2000
  • Niet online
WoRsTeNBoY schreef op donderdag 15 december 2005 @ 23:30:
(none):~ # cat /proc/stat | head -1; sleep 1; cat /proc/stat | head -1
cpu 47303011 972941 7142025 186501873 6915175 859929 2300251
cpu 47303020 972941 7142028 186501954 6915183 859929 2300252

waar ik niet direct inzie hoe ik hiervan een % kan maken :)
Het 4e getal is de idle time:
186501954 (2e idle) - 186501873 (1e idle) = 81
De verstreken tijd is 1 seconde (100 jiffies)
Van de 100 waren er 81 idle jiffies. Omrekenen naar procenten mag je zelf doen :)

Verder zitten er 9 in usermode, 0 in nice en 3 in kernel mode. Samen 12 + 81 = 93 totaal. Jouw seconde mist dus 7 jiffies :?

Bij mij klopt het heel aardig:
code:
1
2
3
# cat /proc/stat |head -1; sleep 1; cat /proc/stat |head -1
cpu  136972518 82227204 112965468 1088479885
cpu  136972518 82227204 112965469 1088479986

0 user, 0 nice, 1 kernel, 101 idle.
Door de onnauwkeurigheid van de sleep, en wat overhead van de 2 cat zal je altijd wat afwijking hebben.

Over 10 seconde wat het 2 jiffies af:
code:
1
2
3
 cat /proc/stat |head -1; sleep 10; cat /proc/stat |head -1
cpu  136972810 82227368 112965719 1088493473
cpu  136973123 82227368 112965814 1088494067
user 313, nice 0, kernel 95 idle 594 = 1002

Je kan ook elke 5 minuten de boel in mrtg/rrdtool pompen, dan hoe je het niet eens om te rekenen. 5x60x100 is 30.000 jiffies in 5 minuten. Dus je gooit je idle timer rechtstreeks naar mrtg (eventueel inverteren met 30.000 - idle), en je zet maxbytes van mrtg op 30.000. Bij 30.000 idle cycles zal hij dan 100% idle in de grafiek plotten.

[ Voor 12% gewijzigd door Coen Rosdorff op 16-12-2005 04:31 ]


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Sorry dat ik weer de nazi uithang, maar laten we dan ook gelijk cat elimineren ...
head -1 /proc/stat
Is ook nog eens sneller B)

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • Oezie Woezie
  • Registratie: December 1999
  • Niet online

Oezie Woezie

Pim. is de beste

WoRsTeNBoY schreef op donderdag 15 december 2005 @ 23:19:
dankuwel voor deze interesante antwoorden,
ik zou dus gewoon 100 - idle % kunnen doen? (via sar -u 1)

ook zie ik in die mooie rrd van Oezie Woezie getallen groter dan 100 waar de schaal in % is uitgerdukt :?

even testen hoe dat zit met die jiffies
ik kan 200% halen om dat ik een dual systeem heb

een mooi Tshirt met Pim. is de beste enzo


  • WoRsTeNBoY
  • Registratie: Januari 2005
  • Laatst online: 21-01-2024
wederom hartelijk bedankt voor de hulp,

dit geeft me wel een goed gevoel van analyse, zo kan je bijna perfect achterhalen waar de bottlenecks zitten B)

de hint van hunterpro om de diskload te plotten is ook een goede hint,

  • Coen Rosdorff
  • Registratie: Januari 2000
  • Niet online
Voor de lurkers:
Idle-time plotten in mrtg, cpubelasting.sh:
code:
1
2
3
#!/bin/bash
awk '/cpu0/ {print $5}' /proc/stat
echo 0


mrtg.cfg gedeelte:
code:
1
2
3
4
5
6
7
8
9
10
11
12
Directory[idle]: idle
Target[lidle]: `/usr/local/mrtg-2/cpubelasting.sh`
Options[idle]: unknaszero,growright,noinfo,nopercent,nolegend
Title[idle]: CPU idle in %
PageTop[idle]: <h1>CPU idle in %</h1>
MaxBytes[idle]: 100
YLegend[idle]: CPU idle in %
ShortLegend[idle]: %
LegendI[idle]: CPU idle
LegendO[idle]:
YSize[idle]: 150
YTics[idle]: 8


Usermode, nice en kernel-mode zou je precies zo kunnen plotten.

  • WoRsTeNBoY
  • Registratie: Januari 2005
  • Laatst online: 21-01-2024
zit een klein foutje in je mrtg.cfg (bij target staat lidle)
en overigens snap ik niet wat je met die waarde uit cpubelasting.sh kan doen
bij mij :
194513788
0

en dit lijkt me toch geen waarde die aan MaxBytes[idle]: 100 voldoet ?

  • Coen Rosdorff
  • Registratie: Januari 2000
  • Niet online
De naam die hier in de mrtg.cfg staat is anders, dus had dat met de hand aangepast.

Mrtg gaat de waarde die het krijgt van cpubelasting.sh terug rekenen (met behulp van de waarde van de eerdere meeting) naar een waarde per seconde. Bij een 5 min interval (kleinste interval voor mrtg) wordt er dus gedeelt door 300 (5x60). Aangezien de jiffies met 100 per seconde oplopen, en er dus 30.000 jiffies in 5 min zitten kon je weer precies uit op een waarde van maxiaal 100 per seconde :)

Ik heb mij config nog even uitgebreid met idle, user en kernel:
cpubelasting.sh
code:
1
2
#!/bin/bash
awk '/cpu0/ {print $5"\n"$3}' /proc/stat

cpubelasting_user_kernel.sh
code:
1
2
#!/bin/bash
awk '/cpu0/ {print $2"\n"$4}' /proc/stat

mrtg.cfg:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Directory[load2]: load2
Target[load2]: `/usr/local/mrtg-2/cpubelasting.sh`
Options[load2]: unknaszero,growright,noinfo,nopercent,nolegend
Title[load2]: CPU idle in %
PageTop[load2]: <h1>CPU idle in %</h1>
MaxBytes[load2]: 100
YLegend[load2]: CPU in %
ShortLegend[load2]: %
LegendI[load2]: CPU idle
LegendO[load2]: CPU nice
YSize[load2]: 150
YTics[load2]: 8

Directory[load3]: load2
Target[load3]: `/usr/local/mrtg-2/cpubelasting_user_kernel.sh`
Options[load3]: unknaszero,growright,noinfo,nopercent,nolegend
Title[load3]: CPU idle in %
PageTop[load3]: <h1>CPU in %</h1>
MaxBytes[load3]: 100
YLegend[load3]: CPU in %
ShortLegend[load3]: %
LegendI[load3]: CPU user
LegendO[load3]: CPU kernel
YSize[load3]: 150
YTics[load3]: 8


Aangezien mrtg alleen maar int's kan rekenen komt het totaal meestal uit op 101 procent. Met rrd-tool zou je alles in 1 grafiek kunnen gooien.

[ Voor 9% gewijzigd door Coen Rosdorff op 17-12-2005 04:32 ]


  • WoRsTeNBoY
  • Registratie: Januari 2005
  • Laatst online: 21-01-2024
klopt als een bus, nou snap ik em helemaal, thnx!

  • Oezie Woezie
  • Registratie: December 1999
  • Niet online

Oezie Woezie

Pim. is de beste

en voor de mensen die graag rrdtool willen gebruiken:

create.sh om de database/rrdfile aan te maken
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
rrdtool create cpu.rrd -s 300 \
    DS:user:COUNTER:600:0:U \
    DS:nice:COUNTER:600:0:U \
    DS:system:COUNTER:600:0:U \
    DS:idle:COUNTER:600:0:U \
    DS:iowait:COUNTER:600:0:U \
    DS:irq:COUNTER:600:0:U \
    DS:softirq:COUNTER:600:0:U \
    DS:steal:COUNTER:600:0:U \
    RRA:AVERAGE:0.5:1:600 \
    RRA:AVERAGE:0.5:6:700 \
    RRA:AVERAGE:0.5:24:755 \
    RRA:AVERAGE:0.5:288:3660 \
    RRA:MAX:0.5:1:600 \
    RRA:MAX:0.5:6:700 \
    RRA:MAX:0.5:24:755 \
    RRA:MAX:0.5:288:3660 \
    RRA:MIN:0.5:1:600 \
    RRA:MIN:0.5:6:700 \
    RRA:MIN:0.5:24:755 \
    RRA:MIN:0.5:288:3660


update.sh het updaten van de database/rrdfile voor de settings die ik heb gekozen elke 5 min
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash

LAVAR=0
while [ $LAVAR -lt 10 ]; do

USER=`awk '/cpu / {print $2}' /proc/stat`
NICE=`awk '/cpu / {print $3}' /proc/stat`
SYSTEM=`awk '/cpu / {print $4}' /proc/stat`
IDLE=`awk '/cpu / {print $5}' /proc/stat`
IOWAIT=`awk '/cpu / {print $6}' /proc/stat`
IRQ=`awk '/cpu / {print $7}' /proc/stat`
SOFTIRQ=`awk '/cpu / {print $8}' /proc/stat`
STEAL=`awk '/cpu / {print $9}' /proc/stat`

rrdtool update cpu.rrd N:$USER:$NICE:$SYSTEM:$IDLE:$IOWAIT:$IRQ:$SOFTIRQ:$STEAL

sleep 300
done


while loop kan je ook weg halen en dan in een cronjob zetten.

en als laatst graph.sh om de plaatjes te maken. kan je eventueel ook gelijk doen met het updaten.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
rrdtool graph cpu.png \
    -t "CPU usage in % van de afgelopen dag" \
    -s -1h \
    -v "usage" \
    --imgformat=PNG \
    --width=800 \
    --height=600 \
    DEF:user=cpu.rrd:user:AVERAGE \
    DEF:nice=cpu.rrd:nice:AVERAGE \
    DEF:system=cpu.rrd:system:AVERAGE \
    DEF:idle=cpu.rrd:idle:AVERAGE \
    DEF:iowait=cpu.rrd:iowait:AVERAGE \
    DEF:irq=cpu.rrd:irq:AVERAGE \
    DEF:softirq=cpu.rrd:softirq:AVERAGE \
    DEF:steal=cpu.rrd:steal:AVERAGE \
    AREA:user#0000FF:user \
    STACK:system#0048FF:system \
    STACK:idle#006CFF:idle \
    STACK:iowait#0090FF:iowait \
    STACK:irq#00B4FF:irq \
    STACK:softirq#00D8FF:softirq \
    STACK:steal#00FFFF:steal \
    LINE1:user#000000 \
    CDEF:a=user,system,+ \
    LINE1:a#000000 \
    CDEF:b=a,idle,+ \
    LINE1:b#000000 \
    CDEF:c=b,iowait,+ \
    LINE1:c#000000 \
    CDEF:d=c,irq,+ \
    LINE1:d#000000 \
    CDEF:e=d,softirq,+ \
    LINE1:e#000000 \
    CDEF:f=e,steal,+ \
    LINE1:f#000000


en dit geeft het volgende resultaat hier:
Afbeeldingslocatie: http://haas.oezie.org/rrd/cpu/bash/cpu.png

een mooi Tshirt met Pim. is de beste enzo

Pagina: 1