Lexikon · J

Jitter

Schwankung der Latenz zwischen Paketen oder Anfragen sowie die bewusste Zufallsstreuung von Retries und Zeitplänen.

Von Obseria-RedaktionAktualisiert

Definition

Jitter hat zwei verwandte Bedeutungen. Im Netzwerk bezeichnet Jitter die Schwankung der Verzögerung zwischen Paketen oder Anfragen, auch Paketlaufzeitschwankung genannt, die besonders für Echtzeitverkehr wie Sprache und Video zählt. In verteilten Systemen ist Jitter bewusst eingefügter Zufall bei Retry-Backoff oder Zeitplänen, damit viele Clients nicht im selben Moment handeln.

Was Jitter ist

Jitter beschreibt unregelmäßiges Timing. Der Begriff wird in zwei Bedeutungen verwendet, die Ihnen im Betrieb regelmäßig begegnen und die Sie auseinanderhalten sollten:

  • Netzwerk-Jitter ist unerwünschte Schwankung der Latenz. Kommen Pakete nach 20 ms, 22 ms, 61 ms und 19 ms an, wirkt der Durchschnitt unauffällig, die Streuung stört aber Echtzeitverkehr.
  • Jitter bei Backoff und Zeitplänen ist erwünschter Zufall. Sie fügen ihn absichtlich hinzu, damit Retries, Cronjobs oder Cache-Aktualisierungen vieler Clients nicht exakt gleichzeitig stattfinden.

Beiden gemeinsam ist Timing, das um einen erwarteten Wert schwankt. Das eine ist ein Symptom, das Sie messen, das andere eine Technik, die Sie gezielt einsetzen.

Jitter im Netzwerk

Im Netzwerk heißt Jitter formal Paketlaufzeitschwankung (Packet Delay Variation). RFC 3393 der IETF definiert die IP Packet Delay Variation als Differenz der Einweg-Verzögerung ausgewählter Pakete, und RTP (RFC 3550) legt eine geglättete Interarrival-Jitter-Schätzung fest, die Empfänger an Sender melden. Typische Ursachen sind Warteschlangen in überlasteten Routern und Switches, Routenwechsel, Retransmissions im WLAN, konkurrierende Massentransfers und CPU-Konkurrenz auf virtualisierten Hosts.

Am stärksten betrifft Jitter Echtzeitanwendungen. Sprach- und Videoempfänger nutzen einen Jitter-Buffer, der Pakete kurz zurückhält, um sie gleichmäßig abzuspielen. Übersteigt der Jitter den Puffer, kommen Pakete zu spät und der Ton bricht ab. Für Sprache gilt ein Wert um 30 ms als verbreiteter Richtwert, Hersteller und Codecs unterscheiden sich aber. Bei Request/Response-APIs zeigt sich hoher Jitter als große Lücke zwischen Median und den hohen Perzentilen.

Jitter messen

MethodeAussage
Mittlere absolute Differenz aufeinanderfolgender VerzögerungenSchwankung von Paket zu Paket, nah an der RTP-Definition
Standardabweichung der LatenzGesamtstreuung um den Mittelwert
Abstand zwischen p50 und p99Wie viel schlechter der Tail als der typische Fall ist
Werkzeuge wie ping, mtr oder iperf3 im UDP-ModusAd-hoc-Messung entlang eines Pfads

Messen Sie kontinuierlich von festen Messpunkten aus statt einmalig während eines Incidents. Nur so wissen Sie, wie normale Schwankung aussieht.

Jitter bei Retries: Exponential Backoff

Fällt eine Abhängigkeit aus, wiederholen Clients ihre Anfragen. Mit reinem exponentiellem Backoff warten alle Clients, die im selben Moment gescheitert sind, im Gleichschritt 1 s, 2 s, 4 s und so weiter, und jede Retry-Welle trifft den sich erholenden Service gleichzeitig. Jitter verteilt diese Wellen. Marc Brookers vielzitierter Artikel „Exponential Backoff And Jitter“ im AWS Architecture Blog vergleicht Varianten:

  • Full Jitter: sleep = random(0, min(cap, base * 2^attempt))
  • Equal Jitter: die Hälfte des Backoffs fest, die andere Hälfte zufällig.
  • Decorrelated Jitter: sleep = min(cap, random(base, previous_sleep * 3))

In seinen Simulationen senkten Full und Decorrelated Jitter Gesamtarbeit und Abschlusszeit deutlich gegenüber Backoff ohne Jitter. Eine einfache Umsetzung:

import random, time

def retry(call, attempts=5, base=0.1, cap=5.0):
    for attempt in range(attempts):
        try:
            return call()
        except TransientError:
            if attempt == attempts - 1:
                raise
            time.sleep(random.uniform(0, min(cap, base * 2 ** attempt)))

Kombinieren Sie das mit einem Retry-Budget und einem Circuit Breaker, damit Retries ganz aufhören, wenn eine Abhängigkeit eindeutig ausgefallen ist. Beachten Sie außerdem Server-Hinweise wie den HTTP-Header Retry-After beim Rate Limiting.

Jitter in Zeitplänen

Dasselbe Thundering-Herd-Problem entsteht bei Zeitplänen. Starten Tausende Hosts einen Cronjob zur vollen Stunde oder laufen alle Cache-Einträge genau eine Stunde nach einem Deployment ab, entsteht in diesem Moment eine Lastspitze. Bewährte Gegenmittel sind eine zufällige Verzögerung vor dem Jobstart (systemd-Timer bieten dafür RandomizedDelaySec), zufällig gestreute Cache-TTLs wie 60 Minuten plus oder minus 10 % und die Verteilung pollender Clients über das Intervall. Prometheus nutzt dieselbe Idee beim Scraping, indem jedes Target innerhalb des Scrape-Intervalls versetzt abgefragt wird. Jitter ändert hier nicht die Menge der Arbeit, sondern nur ihren Zeitpunkt. Das genügt oft, um aus einer gefährlichen Spitze ein beherrschbares Plateau zu machen, ohne dass Sie zusätzliche Kapazität bereitstellen müssen.

Typische Fehler

Häufig wird nur die durchschnittliche Latenz überwacht und Jitter bleibt unsichtbar. Retries laufen ohne jede Zufallskomponente, oder alle Clients initialisieren ihren Zufallsgenerator identisch, sodass der „Jitter“ überall gleich ist. Ein weiterer Fehler: jede Schwankung für Netzwerk-Jitter zu halten, obwohl Garbage-Collection-Pausen oder CPU-Throttling auf dem Host die eigentliche Ursache sind. Prüfen Sie daher immer zuerst, ob die Schwankung im Netzwerk oder im Prozess selbst entsteht.

Wie Obseria unterstützt

Obseria bewahrt vollständige Latenzverteilungen aus Traces und Metriken auf, sodass der Abstand zwischen p50 und p99 im Zeitverlauf sichtbar wird, statt im Durchschnitt zu verschwinden. Das Netzwerk-Monitoring ergänzt den Blick auf den Netzwerkpfad, und synthetische Checks von über 50 Standorten liefern eine stabile Außensicht darauf, wie Antwortzeiten je Region schwanken.

Häufig gestellte Fragen

Das hängt von der Anwendung ab. Für Voice over IP gilt ein Wert um 30 ms als verbreiteter Richtwert, Hersteller und Codecs unterscheiden sich aber. Bei APIs bewerten Sie Jitter besser anhand seiner Wirkung auf Tail-Latenz und SLOs als anhand einer festen Zahl.

Latenz ist die Zeit, die ein Paket oder eine Anfrage braucht. Jitter beschreibt, wie stark diese Zeit von einem Paket oder einer Anfrage zur nächsten schwankt. Eine Verbindung kann eine niedrige mittlere Latenz und trotzdem hohen Jitter haben.

Ohne Jitter wiederholen Clients, die gemeinsam gescheitert sind, ihre Anfragen auch gemeinsam. Die synchronen Lastspitzen können die Erholung eines Service verhindern. Zufälliger Jitter verteilt Retries über die Zeit und senkt Spitzenlast und Gesamtarbeit.

Full Jitter ist einfach und funktioniert in den meisten Fällen gut: Warten Sie eine zufällige Zeit zwischen null und dem begrenzten exponentiellen Backoff. Decorrelated Jitter ist eine gute Alternative. Setzen Sie immer eine Obergrenze, ein Retry-Limit und beachten Sie Retry-After-Header.

Setzen Sie das Wissen in die Praxis um

Testen Sie Obseria 14 Tage kostenlos, mit OpenTelemetry und ohne proprietäre Agenten.