首頁 > 後端開發 > Golang > 為什麼我的 Go HTTP 伺服器未能通過 ApacheBench 測試並出現「連線被拒絕」或「操作逾時」錯誤?

為什麼我的 Go HTTP 伺服器未能通過 ApacheBench 測試並出現「連線被拒絕」或「操作逾時」錯誤?

Patricia Arquette
發布: 2024-12-23 03:32:14
原創
176 人瀏覽過

Why is My Go HTTP Server Failing ApacheBench Tests with

在 ApacheBench 下排查 Go HTTP 伺服器的連線問題

您的 Go HTTP 伺服器在 ApacheBench 測試期間遇到連線問題。 ApacheBench 傳回「連線被拒絕」或「操作逾時」等錯誤,表示伺服器處理傳入請求的能力出現問題。

確定根本原因:連接埠耗盡

經過調查,很明顯伺服器的臨時連接埠已用完。 macOS 的預設臨時連接埠範圍為 49152-65535,在沒有 keepalive 的情況下不足以處理大量並發請求。

連接埠耗盡機制

每個 HTTP不帶 keepalive 的 /1.0 請求會消耗伺服器上唯一的臨時連接埠。當此連接埠範圍耗盡時,作業系統將對未使用連接埠的請求進行排隊。

對效能的影響

一旦連接埠佇列填滿,作業系統將限制進一步傳入連線。因此,客戶端可能會遇到連線失敗或逾時。

緩解問題

要緩解問題,請考慮以下選項:

  • 使用HTTP/1.1 或Keepalive(配合ApacheBench):ApacheBench 提供了-k 選項啟用HTTP/1.1 keepalive。這允許根據工具的並發設定重用連接,從而減少連接埠消耗。
  • 使用 Keepalive 的負載產生器:其他負載產生器,例如 wrk,支援 HTTP/1.1和開箱即用的保活功能。使用這些工具無需手動設定 keepalive。
  • 最佳化伺服器效能(可選):雖然伺服器程式碼執行的工作量最少,但對其進行最佳化可以提高整體效能並減少伺服器負載負載產生器和作業系統。考慮將有意義的工作合併到伺服器程式碼中。

以上是為什麼我的 Go HTTP 伺服器未能通過 ApacheBench 測試並出現「連線被拒絕」或「操作逾時」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板