Leistung und Virtualisierung

Ein Dienst ist langsam trotz freier Host-CPU

Ein CPU-Kontingent kann eine aktive cgroup trotz freier CPUs pausieren. Vergleiche Grenzen und Drosselungszähler vor mehr Threads oder Governor-Wechsel.

Auf dieser Seite
  1. Symptome und Geltungsbereich
  2. Mögliche Ursachen
  3. Sicher prüfen
  4. Nächste Schritte nach Befund
  5. Quellen und Prüfung
  6. Verwandte Probleme

Symptome und Geltungsbereich

  • Arbeit wird schubweise langsam, obwohl CPU-Kapazität frei ist.
  • Drosselungszähler der betroffenen cgroup steigen während der Arbeit.

Betroffene Umgebung

Linux-cgroup-v2-CPU-Controller und systemd-CPUQuota; Controllerdateien hängen von der aktiven Hierarchie ab.

Mögliche Ursachen

Das sind mögliche Erklärungen, keine bestätigte Diagnose. Mehrere unabhängige Fehler können gleichzeitig vorliegen.

  • Endliches cpu.max oder systemd-CPUQuota kann die gesamte Ausführungszeit aller Dienstthreads begrenzen.
  • Eine übergeordnete Slice kann die wirksame Grenze setzen; CPUWeight verteilt Konkurrenz und ist kein hartes Kontingent.

Sicher prüfen

Führe jeweils einen Befehl in der passenden Sitzung aus. Lies zuerst die Erklärung. Großgeschriebene Platzhalter brauchen deine Werte; Werkzeuge und Rechte unterscheiden sich je nach Distribution. Die Website zeigt Befehle an und führt sie niemals aus.

Prüfschritt 1

Ersetze example.service; keine Laufzeitwerte werden geändert.

systemctl show example.service -p ControlGroup -p CPUQuotaPerSecUSec -p CPUQuotaPeriodUSec -p CPUWeight

Ergebnis einordnen: Ein Kontingent von 100% begrenzt ungefähr die Gesamtzeit einer CPU, nicht einen festen Kern. Prüfe bei lokal unbegrenzten Werten die Eltern-Slices.

Prüfschritt 2

Ersetze den Pfad durch ControlGroup unter /sys/fs/cgroup bei cgroup v2; wiederhole das Lesen rund um dieselbe Last.

cat /sys/fs/cgroup/system.slice/example.service/cpu.max /sys/fs/cgroup/system.slice/example.service/cpu.stat

Ergebnis einordnen: cpu.max nennt Budget und Periode. Steigende nr_throttled oder throttled_usec zeigen lokale Begrenzung; Elternlimits erscheinen möglicherweise nicht im Kindzähler.

Nächste Schritte nach Befund

Gemessenes CPU-Kontingent passend wählen

Wenn Drosselung und Latenz zusammenfallen und mehr CPU-Zeit vorgesehen ist, erhöhe das endliche Kontingent dieses Dienstes oder seiner begrenzenden Slice in der Konfiguration. Prüfe Nachbarlasten mit.

Vorsicht: Eine Kind-cgroup entgeht keinem strengeren Elternlimit. Notiere alte Werte und entferne nicht die Grenzen aller Dienste.

Wiederherstellung / Rücknahme: Stelle Kontingent und Periode auf derselben Hierarchieebene zurück und vergleiche gleiche Last.

Hat dir dieser Hinweis geholfen?

Hinweis teilen#

Lastspitzen der Anwendung reduzieren

Wenn das Kontingent beabsichtigt ist, reduziere Worker oder Batchgröße für dieses Budget. Prüfe CPUWeight bei konkurrierender Last, falls relative Bevorzugung statt harter Grenze gewünscht ist.

Vorsicht: Weniger Parallelität kann Durchsatz verringern; der Wechsel von Kontingent zu Gewicht ändert die Ressourcenisolation.

Wiederherstellung / Rücknahme: Stelle Parallelität und ursprüngliche Kontingent-/Gewichtswerte bei schlechteren Messwerten zurück.

Hat dir dieser Hinweis geholfen?

Hinweis teilen#

Quellen und Prüfung

Diese Anleitung basiert auf Originalquellen von Projekten oder Distributionen und wurde am genannten Datum redaktionell geprüft. Das ist eine Quellenprüfung, kein Nachweis einer auf deiner Hardware reproduzierten Lösung. Log-Beispiele sind synthetische Testdaten. Versionsabhängige Details müssen zur installierten Ausgabe passen.