Fehlerbehebung für java.util.concurrent.TimeoutException - Amazon Neptune

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Fehlerbehebung für java.util.concurrent.TimeoutException

Der Gremlin-Java-Client gibt eine aus, java.util.concurrent.TimeoutException wenn eine Gremlin-Anfrage beim Client selbst das Timeout überschreitet, während er darauf wartet, dass ein Slot in einer der Verbindungen verfügbar wird. WebSocket Diese Timeout-Dauer wird durch den clientseitig konfigurierbaren Parameter maxWaitForConnection gesteuert.

Anmerkung

Da Anfragen, bei denen das Timeout auf dem Client auftritt, nie an den Server gesendet werden, spiegeln sie sich in keiner der auf dem Server erfassten Metriken wider, wie z. B. GremlinRequestsPerSec.

Diese Art von Timeout wird im Allgemeinen auf zwei Arten verursacht:

  • Der Server hat tatsächlich die maximale Kapazität erreicht. Wenn dies der Fall ist, füllt sich die Warteschlange auf dem Server, was Sie anhand der Metrik erkennen können. MainRequestQueuePendingRequests CloudWatch Die Anzahl der parallelen Abfragen, die der Server verarbeiten kann, hängt von seiner Instance-Größe ab.

    Wenn die MainRequestQueuePendingRequests-Metrik keine Anhäufung ausstehender Anfragen auf dem Server anzeigt, kann der Server mehr Anfragen bearbeiten und das Timeout-Ereignis wird durch die clientseitige Drosselung verursacht.

  • Drosselung von Anfragen durch den Client. Dies kann im Allgemeinen behoben werden, indem die Client-Konfigurationseinstellungen geändert werden.

    Die maximale Anzahl von parallelen Anforderungen, die der Client senden kann, kann grob wie folgt geschätzt werden:

    maxParallelQueries = maxConnectionPoolSize * Max( maxSimultaneousUsagePerConnection, maxInProcessPerConnection )

    Wenn mehr als maxParallelQueries an den Client gesendet wird, treten java.util.concurrent.TimeoutException-Ausnahmen auf. Sie können dies generell auf verschiedene Weise beheben:

    • Erhöhen der Dauer des Verbindungs-Timeouts. Wenn die Latenz für Ihre Anwendung nicht entscheidend ist, erhöhen Sie die maxWaitForConnection-Einstellung des Clients. Der Client wartet dann länger, bis das Timeout eintritt, was wiederum die Latenz erhöhen kann.

    • Erhöhen der maximalen Anzahl an Anfragen pro Verbindung. Dadurch können mehr Anfragen über dieselbe WebSocket Verbindung gesendet werden. Erhöhen Sie dazu die Einstellungen maxSimultaneousUsagePerConnection und maxInProcessPerConnection des Clients. Diese Einstellungen sollten im Allgemeinen den gleichen Wert haben.

    • Erhöhen Sie die Anzahl der Verbindungen im Verbindungspool. Erhöhen Sie dazu die maxConnectionPoolSize-Einstellung des Clients. Die Kosten sind ein erhöhter Ressourcenverbrauch, da jede Verbindung Arbeitsspeicher und einen Betriebssystem-Dateideskriptor verwendet SSL und WebSocket bei der Initialisierung ein AND-Handshake erforderlich ist.