Skip to content

Ksoftirqd verursacht hohe CPU-Auslastung: Ursachen und Lösungen

Last updated on 19. August 2025

Wenn dein Linux-Server plötzlich eine ungewöhnlich hohe CPU-Auslastung zeigt – insbesondere durch den Prozess ksoftirqd/0 oder ksoftirqd/1 – dann ist das ein Hinweis auf ein zugrunde liegendes Interrupt-Problem. In diesem Beitrag analysieren wir, was ksoftirqd ist, warum er CPU-Probleme verursachen kann und welche Lösungsansätze es gibt.

Was ist ksoftirqd?

ksoftirqd ist ein Kernel-Thread, der Soft Interrupts (SoftIRQs) abarbeitet – insbesondere Netzwerk-Interrupts, I/O-Verarbeitung und Timer. Wenn zu viele Interrupts auftreten, versucht das System, diese über ksoftirqd in den Userspace auszulagern, um die Systemstabilität zu erhalten. Das Problem: Dadurch kann dieser Thread eine oder mehrere CPU-Kerne dauerhaft auslasten.

Symptome erkennen

  • Ein CPU-Kern zeigt dauerhaft 100% Auslastung
  • Der Prozess ksoftirqd/N ist oben in der top– oder htop-Ausgabe
  • Langsame Netzwerkverbindung oder hoher Paketverlust

Diagnose

Um die Interrupt-Verteilung zu prüfen:

cat /proc/interrupts

Um die Prozesse zu beobachten:

top -H -p 2  # oder htop öffnen und nach ksoftirqd suchen

Mögliche Ursachen

  • Hohe Netzwerklast auf einer einzelnen Netzwerkkarte
  • Fehlende Lastverteilung der Interrupts auf mehrere CPU-Kerne
  • Virtuelle Maschinen mit fest zugewiesenen Kernen
  • Probleme mit Netzwerk-Treibern oder defekter Hardware

🔧 Lösungsansätze (aktualisiert)

1. irqbalance aktivieren ✅ (empfohlen)

Das Standard-Tool unter Linux, um Interrupts gleichmäßig auf alle Kerne zu verteilen.

sudo apt update
sudo apt install irqbalance -y
sudo systemctl enable --now irqbalance

➡️ In 90 % der Fälle reicht das völlig aus.
irqbalance läuft im Hintergrund und verteilt IRQs automatisch.


2. CPU-Affinität manuell setzen (optional, nur für Spezialfälle)

Manchmal will man eine bestimmte Netzwerkkarte oder einen Storage-IRQ an bestimmte Kerne binden (z. B. für Latenz-kritische Workloads).

a) IRQs der Netzwerkkarte finden

Die Schnittstelle mit ip link show herausfinden (z. B. eth0, ens18 …).
Dann zugehörige IRQs auflisten:

ls -1 /sys/class/net/<INTERFACE>/device/msi_irqs

Beispiel:

/sys/class/net/eth0/device/msi_irqs/
 ├─ 27
 ├─ 28
 ├─ 29
 └─ 30

b) CPU-Masken anpassen

Jeder IRQ hat eine Maske in /proc/irq/<NR>/smp_affinity.

  • Inhalt ist eine Hexadezimal-Bitmaske:
    • 1 = CPU0
    • 2 = CPU1
    • 4 = CPU2
    • 8 = CPU3
    • f = CPU0-3
    • ff = CPU0-7
  • Beispiel:
echo 2 > /proc/irq/27/smp_affinity
  • → IRQ 27 läuft nur auf CPU 1.

⚠️ Diese Änderungen sind temporär (gehen nach Reboot verloren).
Für dauerhafte Settings → systemd-Script oder /etc/irqbalance/irqbalance.env.


3. Kernel-Parameter optimieren (nur für Experten)

Manchmal kann man über GRUB_CMDLINE_LINUX das Verhalten des Schedulers verbessern. Beispiele:

  • nohz=on → Tickless-Kernel (reduziert Interrupts bei Idle).
  • irqaffinity=0-7 → auf welche CPUs Interrupts verteilt werden dürfen.
  • rcu_nocbs=... → nützlich bei RT- oder HPC-Workloads, verschiebt RCU-Callbacks.

👉 Aber: für normale Web/DB-Server nicht nötig.
Falsche Werte können das System sogar langsamer machen oder Boot-Probleme verursachen.
Deshalb: nur setzen, wenn man wirklich messen und testen kann.


4. Empfehlung 🎯

  • Default: Nur irqbalance aktivieren → fertig.
  • Optional: Manuelle Affinität nur, wenn man eine bestimmte Last gezielt auf CPUs pinnen will (z. B. DPDK, VoIP, NFV).
  • Kernel-Parameter: Nur für Spezial-Umgebungen mit Benchmarking.

4. Zeit manuell synchronisieren (workaround)

Falls das Problem nach einem Suspend/Resume oder nach VM-Migration auftaucht:

sudo date -s "$(date)"

Das kann seltsame Kernel-Timer-Probleme temporär lösen.

Was, wenn nichts hilft?

Falls alle Software-Lösungen versagen, sollte ein Hardware-Defekt in Betracht gezogen werden – insbesondere bei älteren Netzwerk-Karten oder Mainboards. Auch ein BIOS-/Firmware-Update kann helfen. In seltenen Fällen hilft nur der Austausch der betroffenen Komponente.

Zusammenfassung

  • ksoftirqd-Last entsteht meist durch Interrupt-Flut
  • Lastverteilung mit irqbalance und manuelle Affinitäts-Anpassung sind effektive Gegenmaßnahmen
  • Hardwaredefekte oder VM-Konfigurationen können ebenfalls Ursachen sein

Mit diesem Guide hast du eine fundierte Grundlage, um hohe CPU-Auslastung durch ksoftirqd zu analysieren und zu beheben.

Hinweis:: Wenn dir dieser Beitrag gefallen oder geholfen hat, kannst du mich gerne mit einer kleinen Unterstützung motivieren 😊

☕ Buy me a coffee

💙 Support via PayPal

₿/Ξ: Donate with Bitcoin
Address: bc1qt7wc6jfth4t2szc2hp6340sqp3y0pa9r3ywgrr

Show QR codeCrypto QR code
Published inLinux & Serververwaltung

Schreib den ersten Kommentar

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert