ホームページ >バックエンド開発 >Golang >Go HTTP サーバーが「接続が拒否されました」または「操作がタイムアウトしました」エラーで ApacheBench テストに失敗するのはなぜですか?

Go HTTP サーバーが「接続が拒否されました」または「操作がタイムアウトしました」エラーで ApacheBench テストに失敗するのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-23 03:32:14184ブラウズ

Why is My Go HTTP Server Failing ApacheBench Tests with

ApacheBench での Go HTTP サーバーの接続問題のトラブルシューティング

ApacheBench のテスト中に Go HTTP サーバーで接続の問題が発生しました。 ApacheBench は、「接続が拒否されました」または「操作がタイムアウトしました」などのエラーを返し、受信リクエストを処理するサーバーの能力に問題があることを示します。

根本原因の特定: ポートの枯渇

調査すると、サーバーの一時ポートが不足していることが明らかになりました。 macOS のデフォルトの一時ポート範囲は 49152 ~ 65535 ですが、キープアライブなしで大量の同時リクエストを処理するには不十分です。

ポート枯渇のメカニズム

各 HTTPキープアライブなしの /1.0 リクエストは、サーバー上の固有の一時ポートを消費します。このポート範囲がなくなると、オペレーティング システムは未使用のポートのリクエストをキューに入れます。

パフォーマンスへの影響

ポート キューがいっぱいになると、オペレーティング システムはさらに受信を抑制します。接続。その結果、クライアントで接続エラーやタイムアウトが発生する可能性があります。

問題の軽減

問題を軽減するには、次のオプションを検討してください:

  • HTTP/1.1 またはキープアライブを使用します ( ApacheBench): ApacheBench は、HTTP/1.1 キープアライブを有効にする -k オプションを提供します。これにより、ツールの同時実行設定に基づいて接続を再利用できるようになり、ポートの消費が削減されます。
  • Keepalive を備えたロード ジェネレーターを採用する: wrk などの他のロード ジェネレーターは HTTP/1.1 をサポートします。すぐに使えるキープアライブ機能。これらのツールを使用すると、手動のキープアライブ構成の必要がなくなります。
  • サーバー パフォーマンスの最適化 (オプション): サーバー コードは最小限の作業を実行しますが、最適化すると全体的なパフォーマンスが向上し、サーバーの負荷が軽減されます。負荷ジェネレータとオペレーティング システム。意味のある作業をサーバー コードに組み込むことを検討してください。

以上がGo HTTP サーバーが「接続が拒否されました」または「操作がタイムアウトしました」エラーで ApacheBench テストに失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。