为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这个“hello world”golang http 示例在 osx 上变慢

为什么这个“hello world”golang http 示例在 osx 上变慢

Go
UYOU 2021-09-13 16:06:54
我正在对我的小型 Web 应用程序进行基准测试,并注意到在几千个请求之后运行 apache bench 时出现了一些明显的减速。ab -n 20000 http://localhost:8080最初的几千个请求很快,然后变得越来越慢。慢得多。虽然前一千个可能需要一秒钟,但请求 18000-20000 最多需要 10 秒。所以我试图找到慢的部分,在某个时候没有任何东西可以排除,直到我最终对“hello world”风格的 http 服务器示例进行了基准测试。令我惊讶的是,同样的放缓发生了。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 机器上一直运行得很快。这并不是什么大事,因为我不打算在生产环境中在 osx 上运行该应用程序 ;) 但我很好奇是什么导致了 osx 的严重减速
查看完整描述

1 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

将我的评论表述为各种答案:

我不确定 Linux 和 OSX 之间的具体区别是什么,但是您的服务器代码非常好并且没有泄漏任何东西。(我目前没有 OSX 机器可以深入挖掘)。

我怀疑您使用的客户端 ( ab) 没有重用连接,并且由于两个操作系统之间的配置和行为差异,您正在用即将关闭的连接或类似的东西淹没网络堆栈.

只需在你的 ab 脚本中使用 KeepAlive - ab -k -c 100 -n 20000 http://localhost:8080- 正如评论中所指出的,这修复了它。也值得尝试其他工具,如 JMeter、siege 等——或者只是为此编写一个简单的基于 Go 的客户端。默认情况下,Go 在 http 库中有连接重用。


查看完整回答
反对 回复 2021-09-13
  • 1 回答
  • 0 关注
  • 174 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信