为什么这个“hello world”golang http例子在osx上放慢了速度

我正在testing我的小型Web应用程序,并注意到在几千次请求之后,当我运行Apache对其进行操作时发生了一些显着的减速。

ab -n 20000 http://localhost:8080

前几千个请求很快,然后变得越来越慢。 显着较慢。 而第一千个可能需要一秒钟,要求18000-20000需要10秒钟。

所以我试图find缓慢的部分,并在某些时候没有任何东西排除了,直到我结束了基准“hello world”风格的http服务器的例子。 令我惊讶的是,同样的放缓发生。

 package main import "net/http" func main() { mux := http.NewServeMux() mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(200) }) http.ListenAndServe(":8080", mux) } 

同样的小例子在Linux机器上运行得非常快。 这不是一个真正的大事情,因为我不打算在生产中的osx上运行应用程序;)但是我很好奇什么导致了在osx上可怕的放缓反正

我的意见作为各种答案的表述:

我不确定Linux和OSX之间有什么特别的区别,但是你的服务器代码是完全正确的,不会泄漏任何东西。 (我现在没有一台OSX机器可以深入挖掘)。

我怀疑你使用的客户端( ab )没有重用连接,并且由于两个操作系统之间的配置和行为上的差异,你正在使用即将关闭的连接或者沿着这些连接线。

只需在您的ab脚本中使用KeepAlive – ab -k -c 100 -n 20000 http://localhost:8080 – 并在注释中注明此修复它。 也值得尝试其他的工具,如JMeter,围攻等 – 或者只是写一个简单的基于Go的客户端。 Go默认在http库中有连接重用。