Tips en Trucs 2020

Systeemprestaties onderzoeken met dstat

Dstat biedt waardevolle inzichten in de systeemprestaties door het weergeven van informatie over het virtueel geheugen, netwerkverbindingen, CPU activiteit, in- en uitvoerapparaten, enz. Dstat kan je dus beschouwen als een vervanger voor oudere opdrachten zoals vmstat, netstat, iostat en ifstat.

Dstat installeren

Dstat installeer je in openSUSE Leap 15.1 met de opdracht:

dany@pindabook:~> sudo zypper install dstat
[sudo] wachtwoord voor root: 
Gegevens van opslagruimte laden...
Lezen van geïnstalleerde pakketten...
Pakketafhankelijkheden oplossen...

Het volgende NIEUWE pakket zal worden geïnstalleerd:
  dstat

1 nieuw te installeren pakket.
Totale downloadgrootte: 121,6 KiB. Reeds in de cache: 0 B. Na de bewerking zal aanvullend 679,6 KiB worden gebruikt.
Doorgaan? [j/n/v/...? alle opties tonen] (j): 
pakket dstat-0.7.3-lp151.3.1.noarch wordt opgehaald                                            (1/1), 121,6 KiB (679,6 KiB uitgepakt)
Ophalen: dstat-0.7.3-lp151.3.1.noarch.rpm ......................................................................[gereed (14,9 KiB/s)]

Controleren op conflicten tussen bestanden: .................................................................................[gereed]
(1/1) Installeren van: dstat-0.7.3-lp151.3.1.noarch .........................................................................[gereed]

Dstat gebruiken

Om met dstat om de 2 seconden, 6 keer na elkaar de CPU belasting (-c optie) wilt opvragen, gebruik je je opdracht:

dany@pindabook:~> dstat -c 2 6
--total-cpu-usage--
usr sys idl wai stl
  1   0  98   0   0
  0   0 100   0   0
  0   0 100   0   0
  0   3  97   0   0
  0   0 100   0   0
  0   0 100   0   0

De eerste regel met meetgegevens verschijnt direct en toont de gemiddelde waarden vanaf de systeemstart tot nu. Daarna worden de meetgegevens van de intervallen weergegeven.

Dstat kan met opties de volgende informatie weergeven:

Zonder opties geeft dstat bovenstaande standaard informatie weer:

dany@pindabook:~> dstat 2 6
You did not select any stats, using -cdngy by default.
--total-cpu-usage-- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read  writ| recv  send|  in   out | int   csw 
  1   0  99   0   0| 520k   99k|   0     0 |   0     0 | 198   384 
  0   0 100   0   0|   0     0 |  54B  574B|   0     0 | 120   216 
  0   0 100   0   0|   0    10k|  78B  367B|   0     0 | 124   230 
  0   0 100   0   0|   0     0 |  54B  395B|   0     0 | 136   210 
  0   0 100   0   0|   0     0 | 171B  440B|   0     0 | 246   246 
  0   0 100   0   0|   0     0 | 150B  342B|   0     0 | 168   296

Let op de melding "You did not select any stats, using -cdngy by default.". Deze melding kan je onderdrukken met de -a (--all) optie:

dany@pindabook:~> dstat -a 2 6
--total-cpu-usage-- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read  writ| recv  send|  in   out | int   csw 
  1   0  99   0   0| 461k   88k|   0     0 |   0     0 | 191   368 
  0   0 100   0   0|   0     0 | 150B  574B|   0     0 | 132   227 
  0   0 100   0   0|   0     0 |  54B  342B|   0     0 | 127   234 
  0   0 100   0   0|   0     0 |  54B  342B|   0     0 | 118   213 
  0   0 100   0   0|   0     0 |  78B  367B|   0     0 | 124   225 
  0   0 100   0   0|   0     0 | 128B  436B|   0     0 | 124   216 

Als je geen tijdsinterval en aantal metingen opgeeft, blijft de opdracht gegevens opvragen tot je Ctrl+c drukt.

dany@pindabook:~> dstat
You did not select any stats, using -cdngy by default.
--total-cpu-usage-- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read  writ| recv  send|  in   out | int   csw 
  1   0  99   0   0| 412k   79k|   0     0 |   0     0 | 184   354 
  0   0 100   0   0|   0     0 |  54B  798B|   0     0 | 124   217 
  0   0 100   0   0|   0     0 |  54B  350B|   0     0 | 119   224 
  0   0 100   0   0|   0     0 |  54B  350B|   0     0 | 126   224 ^C

Welke informatie krijg je?

De CPU belasting wordt verdeeld over gebruikers- (usr) en systeembelasting (sys). Daarenboven staat de CPU de meeste tijd (99%) niets te doen (idl).

De schijfactiviteit wordt verdeeld in lees- (read) en schrijfactiviteit (write).

De netwerkactiviteit is opgedeeld in ontvangen (recv) en verzonden (send) hoeveelheid gegevens.

De voorbeelden tonen geen pagina (paging) activiteit. Er worden dus geen uitvoerbare blokken in het virtueel geheugen van een proces geladen.

Er worden wat interrupts (int) en context switching (csw) uitgevoerd, maar geen verontrustende aantallen en zonder pieken. Interrupts onderbreken lopende processen voor dringender zaken, terwijl context switching de processtatus bewaard om op een later tijdstip verder afgewerkt te worden.

Onderstaande opdracht onderzoekt het geheugengebruik. Merk op dat er veel vrij geheugen en weinig geheugen in gebruik is, het systeem heeft dus in de geteste situatie absoluut geen gebrek aan geheugenruimte.

dany@pindabook:~> dstat -m 2 3
------memory-usage-----
 used  free  buff  cach
 633M 6426M 61.7M  778M
 633M 6426M 61.7M  778M
 633M 6426M 61.7M  778M

Een uitgebreider rapport kan je opvragen met de opdracht:

dany@pindabook:~> dstat --mem-adv 2 3
-------------advanced-memory-usage-------------
total  used  free  buff  cach dirty shmem  recl
7881M  631M 6428M 61.8M  778M 20.0k 88.9M 70.2M
7881M  631M 6428M 61.8M  778M 20.0k 88.9M 70.2M
7881M  631M 6428M 61.8M  778M 20.0k 88.9M 70.2M

De volgende opdracht toont het aantal geopende bestanden en gebruikte inodes (schijfruimte):

dany@pindabook:~> dstat --fs 2 3
--filesystem-
files  inodes
 6368  52170 
 6368  52170 
 6368  52170

Je kunt de resultaten opslaan in een CSV bestand om dit later te bekijken en/of te verwerken met een rekenblad:

dany@pindabook:~> dstat --output /tmp/stats.csv -a 2 5
--total-cpu-usage-- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read  writ| recv  send|  in   out | int   csw 
  2   1  98   0   0|1072k  244k|   0     0 |   0     0 | 284   558 
  0   0 100   0   0|   0     0 |  54B  574B|   0     0 | 127   229 
  0   0 100   0   0|   0     0 |  87B  389B|   0     0 | 121   216 
  0   0 100   0   0|   0    14k|  54B  342B|   0     0 | 116   222 
  0   0 100   0   0|   0     0 |  91B  389B|   0     0 | 124   227 
dany@pindabook:~> cat /tmp/stats.csv
"Dstat 0.7.3 CSV output"
"Author:","Dag Wieers ",,,,"URL:","http://dag.wieers.com/home-made/dstat/"
"Host:","pindabook.lan",,,,"User:","dany"
"Cmdline:","dstat --output /tmp/stats.csv -a 2 5",,,,"Date:","25 Jan 2020 13:47:14 CET"
"total cpu usage",,,,,"dsk/total",,"net/total",,"paging",,"system",
"usr","sys","idl","wai","stl","read","writ","recv","send","in","out","int","csw"
1.642,0.567,97.584,0.208,0,1097503.117,250090.695,0,0,0,0,284.211,557.620
0.125,0,99.875,0,0,0,0,54,574,0,0,127,229
0,0.125,99.875,0,0,0,0,87,389,0,0,121,215.500
0,0,100,0,0,0,14336,54,342,0,0,116,222
0,0,100,0,0,0,0,91,389,0,0,123.500,227

De tweede opdracht toont de inhoud van het aangemaakte CVS bestand.

Wat is dstat?

Dstat is een python script die je dus zonder beperkingen kunt bekijken, bestuderen en aanpassen. Niemand belet je de code te bestuderen en de opgedane kennis te gebruiken in eigen scripts.

dany@pindabook:~> which dstat
/usr/bin/dstat
dany@pindabook:~> file /usr/bin/dstat
/usr/bin/dstat: Python script, ASCII text executable
dany@pindabook:~> more /usr/bin/dstat | head -6
#!/usr/bin/python3

### This program is free software; you can redistribute it and/or
### modify it under the terms of the GNU General Public License
### as published by the Free Software Foundation; either version 2
### of the License, or (at your option) any later version.
dstat