linux-为什么“ hello world” golang http示例在osx上速度变慢

我是基准我的小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库中具有连接重用功能.

上一篇:减少Linux上的性能差异


下一篇:的APC不会为Symfony1.4 / Doctrine应用程序提供任何性能提升?