4

我有一个托管在 AWS 上的应用程序,它在生产上运行创建一个 http 服务器,如下面的示例代码中所述。Go 库中的默认超时时间为 180 秒。因此,理想情况下,未使用的连接应在 180 秒后关闭。

myMux := http.NewServeMux()
myMux.Handle("/SOME_PATH", appHandler{myHandler})
err = http.ListenAndServe(viper.GetString("handler.port"), myMux)

问题是当应用程序的流量增加时,连接数会增加。但是当流量下降时,连接数保持不变。

我正在使用go version go1.10 linux/amd64,这个应用程序在 Amazon ALB 后面。

编辑问题:

如您所见,当应用程序落后于 ALB 时,连接减少的速度非常慢。那么,可能是什么问题 在此处输入图像描述

4

1 回答 1

0

当您设置服务器时,您应该添加适合您的应用程序的超时,例如

srv := &http.Server{
    ReadTimeout:  5 * time.Second,
    WriteTimeout: 20 * time.Second,
    IdleTimeout:  180 * time.Second,
    Handler:      myMux,
}

有了这个空闲连接应该被关闭。如果它是一个上游负载均衡器,它在这么多连接上发送健康检查,那么解决方案会有所不同。

于 2019-05-11T00:45:30.220 回答