亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go http 服務器慢速基準性能

Go http 服務器慢速基準性能

Go
MMTTMM 2022-01-17 16:51:30
我試圖找到 Go 網絡服務器的最大吞吐量。我在 8 核機器(Intel Xeon 2.5 Mhz)上運行 simplewebserver,并在不同的 8 核機器上運行 wrk 工具。Iperf 命令顯示這些機器之間的速度約為 8-10Gbps。最初,我使用 apache ab 工具犯了一個錯誤,該工具每秒只提供 16k 個請求。問題與鏈接相同。現在,當我切換到 wrk 工具時,我每秒收到大約 90k 個請求,大約 11MB/秒。在第一臺 8 核機器上,我運行了 simplewebserver.gopackage mainimport (   "io"    "net/http"    "runtime")func hello(w http.ResponseWriter, r *http.Request) {    io.WriteString(w, "Hello world!")} func main() {    runtime.GOMAXPROCS(8)    http.HandleFunc("/", hello)    http.ListenAndServe(":8000", nil) }在另一臺 8 核機器上,我跑了 ./wrk -t8 -c1000 -d10s http://10.0.0.6:8000/結果:Running 10s test @ http://10.0.0.6:8000/8 threads and 1000 connectionsThread Stats   Avg      Stdev     Max   +/- StdevLatency    42.65ms  114.89ms   1.96s    91.33%Req/Sec    11.54k     3.01k   25.10k    74.88%923158 requests in 10.10s, 113.57MB readSocket errors: connect 0, read 0, write 0, timeout 20Requests/sec:  91415.11Transfer/sec:     11.25MB我可以說我已經達到了 golang Web 服務器的最大吞吐量嗎?我得到 11 MB/秒的速度,這對于基本程序來說看起來很小。如果我在 www.google.com 頁面上運行 wrk 工具,我會得到大約 200 MB/秒。即使對于像 kafka(java 服務器)這樣的大型復雜計算系統,基準測試結果也超過 70 MB/秒(https://engineering.linkedin.com/kafka/benchmarking-apache-kafka-2-million-writes-second-三便宜的機器)。golang 服務器如何處理每秒數百萬個請求的極端工作負載(至少超過 100MB/秒)?我有什么假設錯了嗎?更新:我在具有相同規格的 16 核機器上運行相同的程序。我將 maxprocs 更改為 16,結果提高到 120k 請求/秒。我覺得我已經達到了 golang http 服務器的最大值,因此我沒有發現請求/秒有任何顯著增加。
查看完整描述

2 回答

?
守著星空守著你

TA貢獻1799條經驗 獲得超8個贊

“過早的優化是萬惡之源” 1

我建議為您的用例構建一些東西,然后嘗試優化。很難建立一個好的基準來測試你想要的東西,所以要確保你測試的是你想要的東西,而不是你的路由器速度之類的東西。


查看完整回答
反對 回復 2022-01-17
?
慕斯王

TA貢獻1864條經驗 獲得超2個贊

Golang net/http 相當慢。如果目標是最大化請求率,還有其他實現。例如https://github.com/valyala/fasthttp在我的測試中,fasthttp 使查詢率翻倍。我的測試是一個簡短的請求和簡短的回復。

該庫有一些限制,例如不支持 HTTP/2。如果您需要 REST API 的 HTTP 并且您不是在尋找互操作性,fasthttp 將非常適合


查看完整回答
反對 回復 2022-01-17
  • 2 回答
  • 0 關注
  • 236 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號