3.3. Red Hat Enterprise Linux-spezifische Information

Zur Überwachung von Bandbreite und CPU-Auslastung unter Red Hat Enterprise Linux werden die in Kapitel 2 beschriebenen Tools benutzt. Sollten Sie dieses Chapter noch nicht gelesen haben, so raten wir Ihnen dringend an, dies noch bevor Sie fortfahren nachzuholen.

3.3.1. Überwachung von Bandbreite auf Red Hat Enterprise Linux

Wie in Abschnitt 2.4.2 erklärt, ist es schwierig Bandbreiten-Nutzung direkt zu überwachen. Durch die Prüfung von Device-Level-Statistiken ist es jedoch möglich grob abzuschätzen, ob ungenügende Bandbreite ein Problem auf Ihrem System darstellt.

Mit dem Befehl vmstat ist es möglich festzustellen, ob die allgemeine Geräte-Aktivität überhöht ist, indem Sie die Felder bi und bo dahingehend überprüfen. Die zusätzliche und genauere Betrachtung der Feldersi und so gibt Ihnen mehr Einblick in Hinsicht auf Plattenaktivität, die durch Swap-bezogenen I/O entsteht:

   procs                      memory    swap          io     system         cpu
 r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
 1  0  0      0 248088 158636 480804   0   0     2     6  120   120  10   3  87
        

In diesem Beispiel zeigt das bi-Feld an, dass zwei Blöcke pro Sekunde zu Block-Devicen geschrieben werden (hauptsächlich zu Laufwerken), während das bo-Feld sechs Blöcke pro Sekunde anzeigt, die von Block-Devicen gelesen wurden. Daraus können wir ersehen, dass keine dieser Aktivitäten auf Swapping zurückzuführen ist, da die si und so-Felder beide eine Swap-bezogene I/O-Rate von null Kilobytes/Sekunde anzeigen.

Durch die Benutzung von iostat ist es möglich, ein wenig mehr Einblick in Platten-bezogene Aktivität zu erhalten:

Linux 2.4.21-1.1931.2.349.2.2.entsmp (raptor.example.com)     07/21/2003

avg-cpu:  %user   %nice    %sys   %idle
           5.34    4.60    2.83   87.24

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
dev8-0            1.10         6.21        25.08     961342    3881610
dev8-1            0.00         0.00         0.00         16          0
        

Dieser Output zeigt uns, dass der Durchschnitt für das Gerät mit Hauptnummer 8 (welches /dev/sda, die erste SCSI-Festplatte ist) nur geringfügig mehr als ein I/O Arbeitsgang pro Sekunde ist (das tsp-Feld). Der Grossteil der I/O-Aktivität für dieses Gerät ist auf Schreibvorgänge (das Blk_wrtn-Feld) mit geringfügig mehr als 25 Blöcken pro Sekunde zurückzuführen (das Blk_wrtn/s-Feld).

Für mehr Details benutzen Sie die iostats -x-Option:

Linux 2.4.21-1.1931.2.349.2.2.entsmp (raptor.example.com)     07/21/2003

avg-cpu:  %user   %nice    %sys   %idle
           5.37    4.54    2.81   87.27

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz
/dev/sda    13.57   2.86  0.36  0.77   32.20   29.05    16.10    14.53    54.52
/dev/sda1    0.17   0.00  0.00  0.00    0.34    0.00     0.17     0.00   133.40
/dev/sda2    0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00    11.56
/dev/sda3    0.31   2.11  0.29  0.62    4.74   21.80     2.37    10.90    29.42
/dev/sda4    0.09   0.75  0.04  0.15    1.06    7.24     0.53     3.62    43.01
        

Nebst den längeren Zeilen, welche auch mehr Felder beinhalten, ist das Erste, das Sie im Auge behalten sollten, dass diese iostat-Ausgabe nunmehr Statistiken auf einer Pro-Partitions-Ebene aufzeigt. Wenn Sie df benutzen, um Mount-Punkte mit Gerätenamen zu verknüpfen, so ist es möglich diesen Report zu benutzen um festzustellen, ob zum Beispiel die Partition, welche /home/ beinhaltet, einer überhöhten Arbeitsbelastung ausgesetzt ist.

Tatsächlich ist jede einzelne Zeilenausgabe von iostat -x länger und beinhaltet mehr Information als diese hier. Hier finden Sie den Rest jeder Zeile (mit der beigefügten Geräte-Spalte zum einfacheren Lesen):

Device:    avgqu-sz   await  svctm  %util
/dev/sda       0.24   20.86   3.80   0.43
/dev/sda1      0.00  141.18 122.73   0.03
/dev/sda2      0.00    6.00   6.00   0.00
/dev/sda3      0.12   12.84   2.68   0.24
/dev/sda4      0.11   57.47   8.94   0.17
        

In diesem Beispiel ist /dev/sda2 interessanterweise die System Swap-Partition. Es ist offensichtlich, dass Swapping für diese Partition kein Problem auf diesem System ist, da viele Felder 0.00 anzeigen.

Ein weiterer interessanter Punkt ist /dev/sda1. Die Statistiken für diese Partition sind eher ungewöhnlich. Die allgemeine Aktivität scheint niedrig zu sein, wobei jedoch die durchschnittliche I/O-Anfragegröße (das avgrq-sz-Feld), die durchschnittliche Wartezeit (das await-Feld) und die durchschnittliche Servicezeit (das svctm-Feld) um einiges höher sind, als bei anderen Partitionen. Warum ist das so? Die Antwort darauf ist, dass diese Partition das /boot/-Verzeichnis beinhaltet, in dem Kernel und anfängliche Ramdisk gespeichert werden. Wenn das System bootet, so sind die Lese-I/Os (beachten Sie, dass nur die rsec/s und rkB/s nicht null sind; regelmäßig finden hier keine Schreibvorgänge statt), die während des Boot-Prozesses verwendet werden, für eine große Anzahl von Blöcken verantwortlich, was zu den relativ langen Warte- und Servicezeiten führt, welche in iostat angezeigt werden.

Es ist möglich den Befehl sar für einen Langzeitüberblick über I/O-Statistiken zu benutzen. Zum Beispiel kann mit sar -b ein allgemeiner I/O-Report angezeigt werden:

Linux 2.4.21-1.1931.2.349.2.2.entsmp (raptor.example.com)     07/21/2003

12:00:00 AM       tps      rtps      wtps   bread/s   bwrtn/s
12:10:00 AM      0.51      0.01      0.50      0.25     14.32
12:20:01 AM      0.48      0.00      0.48      0.00     13.32
…
06:00:02 PM      1.24      0.00      1.24      0.01     36.23
Average:         1.11      0.31      0.80     68.14     34.79
        

Hier, wie auch bei iostats ursprünglicher Anzeige, sind die Statistiken für alle Block-Geräte gruppiert.

Ein anderer I/O-bezogener Report wird mittels dem Befehl sar -d erzeugt:

Linux 2.4.21-1.1931.2.349.2.2.entsmp (raptor.example.com)     07/21/2003

12:00:00 AM       DEV       tps    sect/s
12:10:00 AM    dev8-0      0.51     14.57
12:10:00 AM    dev8-1      0.00      0.00
12:20:01 AM    dev8-0      0.48     13.32
12:20:01 AM    dev8-1      0.00      0.00
…
06:00:02 PM    dev8-0      1.24     36.25
06:00:02 PM    dev8-1      0.00      0.00
Average:       dev8-0      1.11    102.93
Average:       dev8-1      0.00      0.00
        

Dieser Report beinhaltet eine Pro-Device-Information, jedoch mit wenigen Details.

Während es keine eindeutigen Statistiken zur Bandbreitennutzung für einen bestimmten Bus oder Datenpfad gibt, können wir jedoch zumindest feststellen, was die Devices tun und können deren Aktivitäten dazu benutzen, um indirekt die Bus-Beanspruchung festzustellen.

3.3.2. Überwachung der CPU-Nutzung auf Red Hat Enterprise Linux

Im Gegensatz zu Bandbreite ist das Überwachen von CPU-Nutzung ein überschaubares Thema. Vom prozentualen Anteil der CPU-Nutzung in GNOME System Monitor bis hin zu tiefgreifendeen Statistiken, dargestellt durch den sar-Befehl, ist es möglich genauestens festzustellen, wieviel CPU-Leistung verbraucht wird und wodurch.

Über den GNOME System Monitor hinaus, ist top das erste Ressource-Überwachungstool, das in Kapitel 2 behandelt wird und eine tiefgreifendere Darstellulng der CPU-Nutzung liefert. Hier ist ein top-Report von einem Dual-Prozessor-Arbeitsplatzgerät:

  9:44pm  up 2 days, 2 min,  1 user,  load average: 0.14, 0.12, 0.09
90 processes: 82 sleeping, 1 running, 7 zombie, 0 stopped
CPU0 states:  0.4% user,  1.1% system,  0.0% nice, 97.4% idle
CPU1 states:  0.5% user,  1.3% system,  0.0% nice, 97.1% idle
Mem:  1288720K av, 1056260K used,  232460K free,       0K shrd,  145644K buff
Swap:  522104K av,       0K used,  522104K free                  469764K cached

  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND
30997 ed        16   0  1100 1100   840 R     1.7  0.0   0:00 top
 1120 root       5 -10  249M 174M 71508 S <   0.9 13.8 254:59 X
 1260 ed        15   0 54408  53M  6864 S     0.7  4.2  12:09 gnome-terminal
  888 root      15   0  2428 2428  1796 S     0.1  0.1   0:06 sendmail
 1264 ed        15   0 16336  15M  9480 S     0.1  1.2   1:58 rhn-applet-gui
    1 root      15   0   476  476   424 S     0.0  0.0   0:05 init
    2 root      0K   0     0    0     0 SW    0.0  0.0   0:00 migration_CPU0
    3 root      0K   0     0    0     0 SW    0.0  0.0   0:00 migration_CPU1
    4 root      15   0     0    0     0 SW    0.0  0.0   0:01 keventd
    5 root      34  19     0    0     0 SWN   0.0  0.0   0:00 ksoftirqd_CPU0
    6 root      34  19     0    0     0 SWN   0.0  0.0   0:00 ksoftirqd_CPU1
    7 root      15   0     0    0     0 SW    0.0  0.0   0:05 kswapd
    8 root      15   0     0    0     0 SW    0.0  0.0   0:00 bdflush
    9 root      15   0     0    0     0 SW    0.0  0.0   0:01 kupdated
   10 root      25   0     0    0     0 SW    0.0  0.0   0:00 mdrecoveryd
          

Die erste CPU-bezogene Information befindet sich in der allerersten Zeile: die Durchschnittsbelastung. Die Durchschnittsbelastung ist eine Zahl, welche der durchschnittlichen Anzahl von ablaufenden Prozessen auf dem System entspricht. Der Belastungsdurchschnitt ist oft in Form von 3 Zahlen (wie bei top) aufgelistet, welche die Durchschnittsbelastung für die letzte Minute, die letzten fünf Minuten und 15 Minuten darstellen und in diesem konkreten Beispiel darauf hinweisen, dass das System nicht sehr ausgelastet war.

Die nächste Zeile, wenn auch nicht strikt auf CPU-Auslastung bezogen, besitzt einen indirekten Bezug, indem es die Anzahl der ablaufenden Prozesse (hier nur einer -- behalten Sie diese Zahl im Gedächtnis, da diese etwas Besonderes in diesem Beispiel bedeutet) anzeigt. Die Anzahl der ablaufenden Prozesse ist ein guter Indikator, wie CPU-bound ein System eventuell sein mag.

Als nächstes zeigen zwei Zeilen die gegenwärtige Auslastung für jede einzelne der beiden CPUs im System an. Die Nutzungsstatistiken sind aufgegliedert, um anzuzeigen, ob die CPU-Zyklen für Abläufe auf Benutzerebene oder Systemebene benutzt wurden; ebenso beinhaltet ist eine Statistik, die aufzeigt, wieviel CPU-Zeit von Prozessen mit abgeänderter Planungsdringlichkeit aufgebraucht worden ist. Schlussendlich finden Sie eine Idle-Time-Statistik (Zeit im Leerlauf).

Wenn wir uns hinunterbewegen zum Prozess-bezogenen Abschnitt der Anzeige, so sehen wir, dass der Prozess, der die meiste CPU-Leistung verbraucht top selbst ist; in anderen Worten war top der eine ablaufende Prozess auf diesem andererseits nicht produktiven System, der von sich selbst ein "Bild" gemacht hat.

TippTipp
 

Es ist wichtig sich daran zu erinnern, dass in diesem Fall der eigentliche Überwachungsvorgang die von Ihnen erhaltenen Ressource-Nutzungsstatistiken beeinflusst. Dies trifft zu einem bestimmten Maße für jegliche Art von Überwachungssoftware zu.

Um detaillierteres Wissen über CPU-Nutzung zu erlangen, müssen wir mit anderen Tools arbeiten. Wenn wir die Ausgabe von vmstat überprüfen, so kommen wir zu einem geringfügig anderen Verständnis unseres Beispiel-Systems:

   procs                      memory    swap          io     system         cpu
 r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
 1  0  0      0 233276 146636 469808   0   0     7     7   14    27  10   3  87
 0  0  0      0 233276 146636 469808   0   0     0     0  523   138   3   0  96
 0  0  0      0 233276 146636 469808   0   0     0     0  557   385   2   1  97
 0  0  0      0 233276 146636 469808   0   0     0     0  544   343   2   0  97
 0  0  0      0 233276 146636 469808   0   0     0     0  517    89   2   0  98
 0  0  0      0 233276 146636 469808   0   0     0    32  518   102   2   0  98
 0  0  0      0 233276 146636 469808   0   0     0     0  516    91   2   1  98
 0  0  0      0 233276 146636 469808   0   0     0     0  516    72   2   0  98
 0  0  0      0 233276 146636 469808   0   0     0     0  516    88   2   0  97
 0  0  0      0 233276 146636 469808   0   0     0     0  516    81   2   0  97
        

Hier haben wir den Befehl vmstat 1 10 verwendet, um das System zehnmal hintereinander jede Sekunde abzufragen. Zuerst scheinen die CPU-bezogenen Statistiken (die us-, sy- und id-Felder) denjenigen zu gleichen, die von topangezeigt wurden, vielleicht sogar etwas weniger detailliert. Jedoch im Gegensatz zu top können wir ein wenig Einblick darin gewinnen, wie die CPU genutzt wird.

Wenn wir die system-Felder überprüfen, stellen wir fest, dass die CPU im Durchschnitt ungefähr 500 Interrupts pro Sekunde abwickelt und zwischen Prozessen irgendwo von 80 bis nahezu 400 mal pro Sekunde wechselt. Wenn Sie glauben, dass dies eine hohe Aktivität darstellt, dann denken Sie nochmals genau darüber nach. Die Abläufe auf Benutzerebene (das us-Feld) machen im Durchschnitt nur 2% aus, während Abläufe auf Systemebene (das sy-Feld) normalerweise unter 1% liegen. Nochmals, es handelt sich hier um ein nicht produktives System.

Bei nochmaliger Durchsicht der Sysstat-Tools zeigt sich, dass iostat und mpstat nur wenig zusätliche Informationen im Vergleich dazu bieten, was wir bereits durch top und vmstat festgestellt haben. sar produziert jedoch eine Anzahl von Reporten, die bei der Überwachung von CPU-Auslastung nützlich sein können.

Mit dem Befehl sar -q erhält man den ersten Report, welcher die Run-Queue-Länge darstellt sowie auch die Gesamtanzahl an Prozessen und die Belastung im Durchschnitt für die letzten 1 bis 5 Minuten. Hier ist ein Beispiel:

Linux 2.4.21-1.1931.2.349.2.2.entsmp (falcon.example.com)      07/21/2003

12:00:01 AM   runq-sz  plist-sz   ldavg-1   ldavg-5
12:10:00 AM         3       122      0.07      0.28
12:20:01 AM         5       123      0.00      0.03
…
09:50:00 AM         5       124      0.67      0.65
Average:            4       123      0.26      0.26
        

In diesem Beispiel ist das System immer beschäftigt (wenn man bedenkt, dass mehr als ein Prozess zu einem bestimmten Zeitpunkt ablaufen kann), jedoch nicht übermäßig belastet (aufgrund der Tatsache, dass dieses bestimmte System mehr als einen Prozessor besitzt).

Der nächste CPU-bezogene sar-Report wird durch den Befehlsar -u erstellt:

Linux 2.4.21-1.1931.2.349.2.2.entsmp (falcon.example.com)      07/21/2003

12:00:01 AM       CPU     %user     %nice   %system     %idle
12:10:00 AM       all      3.69     20.10      1.06     75.15
12:20:01 AM       all      1.73      0.22      0.80     97.25
…
10:00:00 AM       all     35.17      0.83      1.06     62.93
Average:          all      7.47      4.85      3.87     83.81
        

Die Statistiken, welche in diesem Report enthalten sind, unterscheiden sich nicht von denjenigen, die von vielen anderen Tools erstellt werden. Der größte Nutzen hierbei ist, dass sar die Daten auf fortlaufender Basis zur Verfügung stellt und daher besser geeignet zum Einholen von Langzeit-Durchschnittswerten ist oder auch für die Erstellung von CPU-Auslastungsdiagrammen.

Auf Multiprozessor-Systemen kann der sar -U-Befehl Statistiken für einen individuellen Prozessor oder auch für alle Prozessoren gleichzeitig erstellen. Hier ist ein Beispiel eines sar -U ALL-Output:

Linux 2.4.21-1.1931.2.349.2.2.entsmp (falcon.example.com)      07/21/2003

12:00:01 AM       CPU     %user     %nice   %system     %idle
12:10:00 AM         0      3.46     21.47      1.09     73.98
12:10:00 AM         1      3.91     18.73      1.03     76.33
12:20:01 AM         0      1.63      0.25      0.78     97.34
12:20:01 AM         1      1.82      0.20      0.81     97.17
…
10:00:00 AM         0     39.12      0.75      1.04     59.09
10:00:00 AM         1     31.22      0.92      1.09     66.77
Average:            0      7.61      4.91      3.86     83.61
Average:            1      7.33      4.78      3.88     84.02
        

Der Befehl sar -w erstellt einen Report über die Anzahl von Kontext-Switches pro Sekunde und gibt dabei zusätzlichen Einblick, wenn es darum geht wo CPU-Zyklen verbraucht werden:

Linux 2.4.21-1.1931.2.349.2.2.entsmp (falcon.example.com)      07/21/2003

12:00:01 AM   cswch/s
12:10:00 AM    537.97
12:20:01 AM    339.43
…
10:10:00 AM    319.42
Average:      1158.25
        

Es ist ebenso möglich, zwei verschiedene sar-Reporte über Interrupt-Aktivität zu erstellen. Der erste Report (mittels sar -I SUM-Befehl erstellt) zeigt eine einzige "Interrupts pro Sekunde"-Statistik an:

Linux 2.4.21-1.1931.2.349.2.2.entsmp (falcon.example.com)      07/21/2003

12:00:01 AM      INTR    intr/s
12:10:00 AM       sum    539.15
12:20:01 AM       sum    539.49
…
10:40:01 AM       sum    539.10
Average:          sum    541.00
        

Durch das Benutzen des Befehls sar -I PROC ist es möglich Interrupt-Aktivität in Prozessoren aufzuschlüsseln (auf Multiprozessor-Systemen) und in Interrupt-Ebenen (von 0 bis 15):

Linux 2.4.21-1.1931.2.349.2.2.entsmp (pigdog.example.com)     07/21/2003

12:00:00 AM  CPU  i000/s  i001/s  i002/s  i008/s  i009/s  i011/s  i012/s
12:10:01 AM    0  512.01    0.00    0.00    0.00    3.44    0.00    0.00

12:10:01 AM  CPU  i000/s  i001/s  i002/s  i008/s  i009/s  i011/s  i012/s
12:20:01 AM    0  512.00    0.00    0.00    0.00    3.73    0.00    0.00
…
10:30:01 AM  CPU  i000/s  i001/s  i002/s  i003/s  i008/s  i009/s  i010/s
10:40:02 AM    0  512.00    1.67    0.00    0.00    0.00   15.08    0.00
Average:       0  512.00    0.42    0.00     N/A    0.00    6.03     N/A
        

Dieser Report (welcher horizontal abgeschnitten wurde, um auf diese Seite zu passen) beinhaltet eine Rubrik für jede Interrupt-Ebene (wie zum Beispiel das i002/s-Feld, das die Rate für Interrupt-Ebene 2 darstellt). Wenn dies ein Multiprozessor-System wäre, dann gäbe es eine Zeile pro Beispiel-Periode für jede einzelne CPU.

Beachten Sie auch bei diesem Report, dass von sar spezifische Interrupt-Felder entweder hinzufügt oder entfernt werden, wenn keine Daten für dieses Feld gesammelt werden. Der oben angefürte Report stellt dahingehend ein Beispiel zur Verfügung, indem dieser am Ende Interrupt-Ebenen (3 und 10) beinhaltet, die zu Beginn der Abfrageperiode nicht vorhanden waren.

AnmerkungAnmerkung
 

Es gibt noch zwei andere Interrupt-bezogene sar-Reporte — sar -I ALL und sar -I XALL. Jedoch sammelt die standardmäßige Konfiguration für sadc nicht die notwendige Information für diese Reporte. Dies kann durch das Bearbeiten der Datei /etc/cron.d/sysstat geändert werden, indem diese Zeile verändert wird:

*/10 * * * * root /usr/lib/sa/sa1 1 1
          

Zu dieser:

*/10 * * * * root /usr/lib/sa/sa1 -I 1 1
          

Beachten Sie dabei, dass diese Änderung die Sammlung zusätzlicher Informationen im Falle von sadc und dies gleichzeitig größere Dateigrößen zur Folge hat. Stellen Sie daher sicher, dass Ihre Systemkonfiguration den zusätzlichen Verbrauch von Platz unterstützt.