我是基准我的小web应用程序,并注意到一些显著放缓,当我一对夫妇一千请求后,运行反对阿帕奇替补.
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的严重减速
解决方法:
将我的评论表达为以下答案:
我不确定Linux和OSX之间的具体区别是什么,但是您的服务器代码是完美的并且没有泄漏任何内容. (我没有一个OSX机此刻越挖越深).
我怀疑您正在使用的客户端(ab)不会重用连接,并且由于两个操作系统之间的配置和行为差异,您在网络堆栈中充斥着即将关闭的连接或类似的连接线.
只需在您的ab脚本中使用KeepAlive-ab -k -c 100 -n 20000 http:// localhost:8080-并按照注释中的说明进行了修复.也值得尝试其他工具,例如JMeter,siege等-或为此编写一个简单的基于Go的客户端.默认情况下,Go在http库中具有连接重用功能.