为什么这个 "hello world" golang http 示例在 osx 上变慢
why does this "hello world" golang http example slow down on osx
我正在对我的小型 Web 应用程序进行基准测试,当我 运行在几千个请求后对它进行 apache 测试时,我注意到速度明显变慢。
ab -n 20000 http://localhost:8080
前几千个请求很快,然后越来越慢。显着变慢。虽然前一千个请求可能需要一秒钟,但请求 18000-20000 最多需要 10 秒。
所以我试图找到缓慢的部分并且在某些时候没有任何东西可以排除,直到我最终对 "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 上的可怕减速 [=14] =]
将我的评论表述为某种回答:
我不确定 Linux 和 OSX 之间的具体区别是什么,但是您的服务器代码非常好,没有泄漏任何东西。 (我现在没有 OSX 机器来深入挖掘)。
我怀疑您正在使用的客户端 (ab
) 不会重用连接,并且由于两个操作系统之间的配置和行为差异,您正在用大约-将要关闭的连接或类似的东西。
只需在您的 ab 脚本中使用 KeepAlive - ab -k -c 100 -n 20000 http://localhost:8080
- 如评论中所述,此问题已修复。也值得尝试其他工具,如 JMeter、siege 等——或者为此编写一个简单的基于 Go 的客户端。 Go 默认在 http 库中有连接复用。
我正在对我的小型 Web 应用程序进行基准测试,当我 运行在几千个请求后对它进行 apache 测试时,我注意到速度明显变慢。
ab -n 20000 http://localhost:8080
前几千个请求很快,然后越来越慢。显着变慢。虽然前一千个请求可能需要一秒钟,但请求 18000-20000 最多需要 10 秒。
所以我试图找到缓慢的部分并且在某些时候没有任何东西可以排除,直到我最终对 "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 上的可怕减速 [=14] =]
将我的评论表述为某种回答:
我不确定 Linux 和 OSX 之间的具体区别是什么,但是您的服务器代码非常好,没有泄漏任何东西。 (我现在没有 OSX 机器来深入挖掘)。
我怀疑您正在使用的客户端 (ab
) 不会重用连接,并且由于两个操作系统之间的配置和行为差异,您正在用大约-将要关闭的连接或类似的东西。
只需在您的 ab 脚本中使用 KeepAlive - ab -k -c 100 -n 20000 http://localhost:8080
- 如评论中所述,此问题已修复。也值得尝试其他工具,如 JMeter、siege 等——或者为此编写一个简单的基于 Go 的客户端。 Go 默认在 http 库中有连接复用。