Heim >Backend-Entwicklung >Golang >Warum schlägt mein Go-HTTP-Server die ApacheBench-Tests mit den Fehlern „Verbindung abgelehnt' oder „Vorgangszeitüberschreitung' fehl?

Warum schlägt mein Go-HTTP-Server die ApacheBench-Tests mit den Fehlern „Verbindung abgelehnt' oder „Vorgangszeitüberschreitung' fehl?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-23 03:32:14186Durchsuche

Why is My Go HTTP Server Failing ApacheBench Tests with

Fehlerbehebung bei Verbindungsproblemen mit dem Go-HTTP-Server unter ApacheBench

Ihr Go-HTTP-Server hat während des ApacheBench-Tests Verbindungsprobleme. ApacheBench gibt Fehler wie „Verbindung abgelehnt“ oder „Zeitüberschreitung des Vorgangs“ zurück, was auf ein Problem mit der Fähigkeit des Servers hinweist, eingehende Anfragen zu verarbeiten.

Identifizierung der Grundursache: Port-Auslastung

Bei der Untersuchung stellt sich heraus, dass der Server nicht mehr über kurzlebige Ports verfügt. macOS verfügt über einen standardmäßigen flüchtigen Portbereich von 49152-65535, der nicht ausreicht, um eine große Menge gleichzeitiger Anfragen ohne Keepalive zu verarbeiten.

Mechanismus der Porterschöpfung

Jedes HTTP /1.0-Anfrage ohne Keepalive verbraucht einen eindeutigen kurzlebigen Port auf dem Server. Wenn dieser Portbereich erschöpft ist, stellt das Betriebssystem Anfragen für ungenutzte Ports in die Warteschlange.

Auswirkungen auf die Leistung

Sobald die Portwarteschlange voll ist, drosselt das Betriebssystem weitere eingehende Anfragen Verbindungen. Infolgedessen kann es bei Clients zu Verbindungsfehlern oder Zeitüberschreitungen kommen.

Behebung des Problems

Um das Problem zu entschärfen, ziehen Sie die folgenden Optionen in Betracht:

  • Verwenden Sie HTTP/1.1 oder Keepalive (mit ApacheBench): ApacheBench bietet ein -k Option zum Aktivieren von HTTP/1.1-Keepalive. Dadurch können Verbindungen basierend auf den Parallelitätseinstellungen des Tools wiederverwendet werden, wodurch der Portverbrauch reduziert wird.
  • Verwenden Sie einen Lastgenerator mit Keepalive: Andere Lastgeneratoren wie wrk unterstützen HTTP/1.1 und Keepalive-Funktionen sofort einsatzbereit. Durch die Verwendung dieser Tools entfällt die Notwendigkeit einer manuellen Keepalive-Konfiguration.
  • Optimieren Sie die Serverleistung (optional): Während Ihr Servercode nur minimale Arbeit leistet, kann seine Optimierung die Gesamtleistung verbessern und die Belastung reduzieren Lastgenerator und Betriebssystem. Erwägen Sie, sinnvolle Arbeit in den Servercode zu integrieren.

Das obige ist der detaillierte Inhalt vonWarum schlägt mein Go-HTTP-Server die ApacheBench-Tests mit den Fehlern „Verbindung abgelehnt' oder „Vorgangszeitüberschreitung' fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn