我正在對我的小型 Web 應用程序進行基準測試,并注意到在幾千個請求之后運行 apache bench 時出現了一些明顯的減速。ab -n 20000 http://localhost:8080最初的幾千個請求很快,然后變得越來越慢。慢得多。雖然前一千個可能需要一秒鐘,但請求 18000-20000 最多需要 10 秒。所以我試圖找到慢的部分,在某個時候沒有任何東西可以排除,直到我最終對“hello world”風格的 http 服務器示例進行了基準測試。令我驚訝的是,同樣的放緩發(fā)生了。package mainimport "net/http"func main() { mux := http.NewServeMux() mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(200) }) http.ListenAndServe(":8080", mux)}同樣的小例子在 linux 機器上一直運行得很快。這并不是什么大事,因為我不打算在生產環(huán)境中在 osx 上運行該應用程序 ;) 但我很好奇是什么導致了 osx 的嚴重減速
1 回答

慕虎7371278
TA貢獻1802條經驗 獲得超4個贊
將我的評論表述為各種答案:
我不確定 Linux 和 OSX 之間的具體區(qū)別是什么,但是您的服務器代碼非常好并且沒有泄漏任何東西。(我目前沒有 OSX 機器可以深入挖掘)。
我懷疑您使用的客戶端 ( ab
) 沒有重用連接,并且由于兩個操作系統之間的配置和行為差異,您正在用即將關閉的連接或類似的東西淹沒網絡堆棧.
只需在你的 ab 腳本中使用 KeepAlive - ab -k -c 100 -n 20000 http://localhost:8080
- 正如評論中所指出的,這修復了它。也值得嘗試其他工具,如 JMeter、siege 等——或者只是為此編寫一個簡單的基于 Go 的客戶端。默認情況下,Go 在 http 庫中有連接重用。
- 1 回答
- 0 關注
- 190 瀏覽
添加回答
舉報
0/150
提交
取消