Die üblichen Verdächtigen: iostat, vmstat und dstat

Beginnen wir mit der heiligen Dreifaltigkeit der Performance-Überwachungstools:

1. iostat: Der I/O-Detektiv

Wenn die Festplatten-I/O Ihnen Kopfschmerzen bereitet, ist iostat Ihr Aspirin. Dieses praktische Tool gibt Ihnen einen Überblick über die CPU-Auslastung und I/O-Statistiken für alle Ihre Geräte.

$ iostat -xz 1
Linux 5.4.0-42-generic (myserver)     15.06.2023     _x86_64_    (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.43    0.00    1.22    0.31    0.00   96.04

Device            r/s     w/s     rkB/s     wkB/s   rrqm/s   wrqm/s  %rrqm  %wrqm r_await w_await aqu-sz rareq-sz wareq-sz  svctm  %util
sda              0.35    2.13     14.44     34.96     0.00     0.57   0.00  21.05    0.57    2.50   0.01    41.54    16.43   0.40   0.10

Was sagt uns das? Nun, wir haben hier ein ziemlich untätiges System. Die CPU langweilt sich 96% der Zeit, und unsere Festplatte (sda) ist mit nur 0,10% Auslastung kaum gefordert.

2. vmstat: Der Speicher-Maestro

vmstat ist Ihr Fenster in die Seele des Speichersystems. Es zeigt Ihnen alles von der Länge der Warteschlange bis zur Swap-Nutzung.

$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 6981496 191268 724132    0    0     3     5   36   79  2  1 97  0  0
 0  0      0 6981496 191268 724132    0    0     0     0  209  355  1  0 99  0  0

Schauen Sie sich die free-Spalte an - wir haben etwa 7GB freien Speicher. Kein Wunder, dass unser System so entspannt ist!

3. dstat: Der Alleskönner

Wenn iostat und vmstat ein Kind hätten, wäre es dstat. Dieses vielseitige Tool kombiniert CPU-, Festplatten-, Netzwerk-, Paging- und Systemstatistiken in einer bunten Ausgabe.

$ dstat -cdngy
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read  writ| recv  send|  in   out | int   csw 
  2   1  97   0   0|  14k   40k|   0     0 |   0     0 | 237   420 
  1   0  99   0   0|   0     0 |  66B  722B|   0     0 | 206   357 
  1   0  99   0   0|   0     0 |  60B  722B|   0     0 | 208   355 

Das nenne ich eine All-in-One-Lösung für Systemstatistiken!

Tiefer graben: Die unbekannten Helden

Aber warten Sie, es gibt noch mehr! Lassen Sie uns einige weniger bekannte, aber ebenso leistungsstarke Tools erkunden:

4. sar: Der Zeitreisende

sar (System Activity Reporter) ist wie eine Zeitmaschine für Ihre Systemstatistiken. Es kann historische Daten anzeigen und sogar schicke Grafiken erstellen.

$ sar -u 1 3
Linux 5.4.0-42-generic (myserver)     15.06.2023     _x86_64_    (4 CPU)

13:00:01        CPU     %user     %nice   %system   %iowait    %steal     %idle
13:00:02        all      2.01      0.00      0.75      0.25      0.00     96.98
13:00:03        all      1.75      0.00      0.75      0.00      0.00     97.49
13:00:04        all      1.75      0.00      0.75      0.25      0.00     97.24
Average:        all      1.84      0.00      0.75      0.17      0.00     97.24

Profi-Tipp: Verwenden Sie sar -A, um ALLE Statistiken zu sehen. Aber Vorsicht, es ist wie das Trinken aus einem Feuerwehrschlauch!

5. perf: Das Profiling-Kraftpaket

Wenn Sie tiefer als tief gehen müssen, ist perf Ihre Ausrüstung. Es kann die CPU-Auslastung profilieren, Systemaufrufe verfolgen und sogar Cache-Fehler analysieren.

$ sudo perf top
Samples: 42K of event 'cpu-clock', 4000 Hz, Event count (approx.): 5250000000 lost: 0/0 drop: 0/0
Overhead  Shared Object                    Symbol
   7.89%  [kernel]                         [k] _raw_spin_unlock_irqrestore
   4.32%  [kernel]                         [k] finish_task_switch
   3.21%  [kernel]                         [k] __schedule
   2.96%  [kernel]                         [k] schedule

Schauen Sie sich das an! Die Funktion _raw_spin_unlock_irqrestore des Kernels beansprucht fast 8% unserer CPU. Vielleicht ist es an der Zeit, in den Kernel-Code einzutauchen?

Die Handlung verdichtet sich: Leistung visualisieren

Manchmal sagt ein Bild mehr als tausend strace-Ausgaben. Hier kommen diese grafischen Tools ins Spiel:

6. htop: Der interaktive Prozessbetrachter

Denken Sie an top auf Steroiden. htop bietet Ihnen eine farbenfrohe, interaktive Ansicht Ihrer Prozesse.

htop screenshot
htop in Aktion: Ein Fest für die Augen und ein Buffet für das Gehirn.

7. atop: Der System- und Prozessmonitor

atop ist wie der überambitionierte Cousin von top. Es zeigt Systemzähler und prozessbezogene Statistiken in einer Ansicht.

$ atop
ATOP - myserver                        2023/06/15  13:15:23                        ------------------------------
PRC | sys    1.85s | user   3.70s | #proc    213 | #zombie    0 | #exit      0 |
CPU | sys       2% | user      4% | irq       0% | idle    94% | wait      0% |
CPL | avg1    0.02 | avg5    0.05 | avg15   0.05 | csw    53592 | intr   43357 |
MEM | tot    15.5G | free    6.8G | cache 724.7M | buff  191.3M | slab  409.8M |
SWP | tot    15.9G | free   15.9G |              | vmcom   4.7G | vmlim  23.7G |
DSK |          sda | busy      0% | read     131 | write    644 | avio 2.50 ms |
NET | transport    | tcpi      37 | tcpo      36 | udpi       0 | udpo       0 |
NET | network      | ipi       37 | ipo       36 | ipfrw      0 | deliv     37 |
NET | eth0    ---- | pcki      19 | pcko      18 | si    1 Kbps | so    1 Kbps |

  PID SYSCPU USRCPU   VGROW  RGROW  RDDSK  WRDSK  ST EXC  S  CPU CMD       1/600
 1829  0.37s  0.73s      0K     0K     0K     0K  --   -  R   1% atop
    1  0.02s  0.03s      0K     0K     0K     0K  --   -  S   0% systemd

Das nenne ich Informationsüberflutung!

Das Geheimrezept: Eigene Überwachungsskripte

Manchmal reichen Standard-Tools einfach nicht aus. Dann ist es an der Zeit, die Ärmel hochzukrempeln und eigene Überwachungsskripte zu schreiben. Hier ist ein einfaches Beispiel, das iostat und vmstat-Daten kombiniert:


#!/usr/bin/env python3

import subprocess
import time

def get_iostat():
    output = subprocess.check_output("iostat -c 1 1 | tail -n 2 | head -n 1", shell=True).decode()
    cpu_stats = output.split()
    return float(cpu_stats[5])  # %idle

def get_vmstat():
    output = subprocess.check_output("vmstat 1 2 | tail -n 1", shell=True).decode()
    stats = output.split()
    return int(stats[3])  # free memory

while True:
    cpu_idle = get_iostat()
    free_mem = get_vmstat()
    print(f"CPU Idle: {cpu_idle}%, Free Memory: {free_mem}K")
    time.sleep(5)

Führen Sie dieses Skript aus, und Sie haben Ihr eigenes Mini-Überwachungssystem!

Das Fazit: Werden Sie zum Sherlock Holmes der Systemleistung

Die Überwachung von Linux-Systemen auf niedriger Ebene ist wie ein Detektiv in einem Cyberpunk-Roman zu sein. Sie haben Ihre Werkzeuge (iostat, vmstat, dstat), Ihre Lupe (perf) und Ihren Watson (eigene Skripte). Der Schlüssel liegt darin, zu wissen, welches Tool wann zu verwenden ist und wie man die Ergebnisse interpretiert.

Denken Sie daran:

  • Beginnen Sie mit den Grundlagen (iostat, vmstat, dstat) für einen schnellen Überblick
  • Gehen Sie bei Bedarf mit spezialisierten Tools wie perf tiefer
  • Visualisieren Sie Daten mit htop und atop für eine andere Perspektive
  • Haben Sie keine Angst, eigene Skripte für Ihre spezifischen Bedürfnisse zu schreiben

Und am wichtigsten: Üben, üben, üben! Je mehr Systeme Sie überwachen, desto besser werden Sie darin, Anomalien zu erkennen und Leistungsprobleme zu lösen.

Denkanstoß

"Das effektivste Debugging-Tool ist immer noch sorgfältiges Nachdenken, gepaart mit strategisch platzierten Print-Anweisungen." — Brian Kernighan

Auch wenn wir all diese ausgeklügelten Tools zur Verfügung haben, ist manchmal der beste Ansatz, einen Schritt zurückzutreten, kritisch über das Problem nachzudenken und vielleicht ein paar strategische echo-Anweisungen einzufügen. Lassen Sie nicht zu, dass die Tools Ihre Problemlösungsfähigkeiten überschatten!

Was kommt als Nächstes?

Jetzt, da Sie mit diesem Wissen ausgestattet sind, warum richten Sie nicht eine Testumgebung ein und beginnen mit dem Experimentieren? Versuchen Sie, verschiedene Lastszenarien zu simulieren und sehen Sie, wie diese Tools reagieren. Oder noch besser, wenden Sie diese Techniken auf ein reales Problem an, mit dem Sie konfrontiert sind. Der Beweis des Puddings liegt im Essen, schließlich!

Viel Spaß beim Überwachen, und mögen Ihre Systeme immer leistungsfähig sein!