Die Load Average ist eine der wichtigsten Kennzahlen für die Server-Performance. Sie zeigt, wie ausgelastet das System ist.

Was ist Load Average?

Die Load Average zeigt die durchschnittliche Anzahl von Prozessen, die auf CPU-Zeit warten oder gerade arbeiten.

Load Average: 1.50, 1.20, 0.80
              │     │     │
              │     │     └── Durchschnitt der letzten 15 Minuten
              │     └──────── Durchschnitt der letzten 5 Minuten
              └────────────── Durchschnitt der letzten 1 Minute

Load abfragen

Schnelle Methoden

# uptime (einfachste Methode)
uptime
# Ausgabe: 14:32:07 up 5 days, load average: 1.50, 1.20, 0.80

# /proc/loadavg
cat /proc/loadavg
# Ausgabe: 1.50 1.20 0.80 2/150 12345

# w
w
# Zeigt auch eingeloggte User

Detaillierte Ansicht

# top (interaktiv)
top

# htop (bessere Oberfläche)
htop

# Load über Zeit
vmstat 1

Load richtig interpretieren

Grundregel: Load vs. CPU-Kerne

Single-Core-System:
Load 1.0 = CPU zu 100% ausgelastet
Load 2.0 = 1 Prozess wartet

Quad-Core-System:
Load 4.0 = alle CPUs zu 100% ausgelastet
Load 8.0 = 4 Prozesse warten

CPU-Kerne ermitteln

# Anzahl logischer CPUs
nproc

# Oder detailliert
lscpu | grep "^CPU(s):"

# Oder
cat /proc/cpuinfo | grep processor | wc -l

Faustregeln

| Load / Kerne | Zustand | |--------------|---------| | < 0.7 | Niedrig – System kaum ausgelastet | | 0.7 - 1.0 | Normal – gute Auslastung | | 1.0 - 2.0 | Erhöht – akzeptabel bei Spitzen | | > 2.0 | Hoch – Engpass wahrscheinlich | | > 5.0 | Kritisch – sofortiges Handeln nötig |

Beispiel:

  • 4-Kern-Server mit Load 3.0 → 75% Auslastung (gut)
  • 4-Kern-Server mit Load 8.0 → überlastet (Prozesse warten)

Load-Komponenten verstehen

Die Load besteht aus verschiedenen Zuständen:

Load = Running + Waiting for CPU + Waiting for I/O
       (R)        (R queue)        (D state)

Prozessstatus

# Mit ps anzeigen
ps aux

# Wichtige Status:
# R = Running (läuft oder bereit)
# S = Sleeping (wartet auf Event)
# D = Uninterruptible Sleep (wartet auf I/O)
# Z = Zombie

D-State-Prozesse (I/O-Wait) erhöhen die Load, obwohl die CPU frei sein könnte!

Ursachen für hohe Load

1. CPU-Auslastung

# CPU-Verbrauch nach Prozess
top -o %CPU

# Oder
ps aux --sort=-%cpu | head -10

Typische Verursacher:

  • Rechenintensive Anwendungen
  • Ineffiziente Skripte
  • Malware/Cryptominer

2. I/O-Wait (Festplattenengpass)

# I/O-Wait prüfen
vmstat 1 5
# Spalte 'wa' zeigt I/O-Wait in %

# Detailliert
iostat -x 1
# %iowait und %util beachten

# Prozesse mit I/O
iotop

Typische Verursacher:

  • Langsame Festplatten
  • Datenbankabfragen
  • Backup-Prozesse
  • Log-Schreiben

3. RAM-Mangel (Swapping)

# Swap-Nutzung
free -h

# Swap-Aktivität
vmstat 1
# si/so Spalten zeigen Swap-I/O

Wenn Swap aktiv genutzt wird, steigt die Load durch I/O-Wait.

4. Zu viele Prozesse

# Prozessanzahl
ps aux | wc -l

# Prozesse pro User
ps -eo user | sort | uniq -c | sort -rn

# Fork-Bomben erkennen
ps aux | awk '{print $11}' | sort | uniq -c | sort -rn | head

Diagnose-Workflow

Schritt 1: Übersicht

# Load und Uptime
uptime

# RAM-Status
free -h

# Schnelle Prozess-Übersicht
top -bn1 | head -20

Schritt 2: CPU oder I/O?

# vmstat zeigt beides
vmstat 1 5

# Ausgabe interpretieren:
# r     = Prozesse, die auf CPU warten
# b     = Prozesse in I/O-Wait (blocked)
# wa    = I/O-Wait %
# us/sy = User/System CPU %
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 500000  50000 200000    0    0    10    20  100  200 25 10 60  5  0
  • r=2, b=0: CPU-Last, kein I/O-Problem
  • r=0, b=5: I/O-Problem (Prozesse blockiert)
  • wa=30: 30% I/O-Wait, Festplatte ist Flaschenhals

Schritt 3: Verursacher finden

Bei CPU-Last:

# Top CPU-Verbraucher
ps aux --sort=-%cpu | head -10

Bei I/O-Last:

# I/O pro Prozess
iotop -aoP

# Oder
pidstat -d 1 5

Schritt 4: Prozess analysieren

# Details zu Prozess
ps -p PID -o pid,ppid,user,%cpu,%mem,etime,cmd

# Offene Dateien
lsof -p PID

# System-Calls
strace -p PID -c

Lösungen

CPU-Last reduzieren

# Prozess beenden
kill PID

# Sanft beenden
kill -15 PID

# Erzwungen beenden
kill -9 PID

# Prozess-Priorität senken
renice +10 -p PID

# Prozess auf einen CPU-Kern beschränken
taskset -c 0 -p PID

I/O-Last reduzieren

# I/O-Priorität senken
ionice -c 3 -p PID

# Prozess mit niedriger I/O-Prio starten
ionice -c 2 -n 7 backup-script.sh

Cron-Jobs entzerren

# Statt alle um 00:00
0 0 * * * backup.sh
0 0 * * * report.sh
0 0 * * * cleanup.sh

# Besser zeitlich verteilt
0  0 * * * backup.sh
30 0 * * * report.sh
0  1 * * * cleanup.sh

Monitoring einrichten

Einfaches Skript

#!/bin/bash
# /usr/local/bin/load-check.sh

THRESHOLD=4.0
LOAD=$(cat /proc/loadavg | awk '{print $1}')

if (( $(echo "$LOAD > $THRESHOLD" | bc -l) )); then
    echo "WARNUNG: Load ist $LOAD" | mail -s "High Load" admin@example.com
fi

Mit Cron

*/5 * * * * /usr/local/bin/load-check.sh

Grafische Darstellung

  • Netdata: Echtzeit-Monitoring
  • Grafana + Prometheus: Historische Daten
  • htop: Interaktive Konsole

Zusammenfassung

| Kennzahl | Befehl | Bedeutung | |----------|--------|-----------| | Load Average | uptime | Gesamtlast | | CPU-Nutzung | top, ps | Prozessor-Auslastung | | I/O-Wait | vmstat, iostat | Festplatten-Engpass | | RAM/Swap | free -h | Speicherstatus | | Pro Prozess | iotop, top | Verursacher finden |

Fazit

Die Load Average ist ein wichtiger Indikator, aber nur aussagekräftig im Verhältnis zur CPU-Anzahl. Eine Load von 4.0 auf einem 8-Kern-Server ist unkritisch, auf einem Single-Core-System problematisch. Unterscheiden Sie zwischen CPU-Last und I/O-Wait – die Lösungen sind unterschiedlich. Bei I/O-Problemen hilft mehr CPU nicht, Sie brauchen schnellere Festplatten oder weniger I/O-intensive Prozesse.