小编use*_*276的帖子

Go net/http 在高负载下内存泄漏

我正在开发一个使用net/http包调用客户端 URL 的 API 。基于用户国家/地区,goroutine 中的每个请求(POST 调用)同时调用 1 到 8 个 URL。该应用程序可以处理大约 1000-1500 个请求的低 qps,但是将应用程序扩展到 3k 请求,即使只有 1 个客户端 URL 被称为应用程序在几分钟后停止响应,内存也会突然增加(响应时间远高于 50 秒) )。我正在使用 Go 本机net/http包和gorilla/mux路由器。关于这个问题的其他问题说要关闭响应主体,但我已经使用

        req, err := http.NewRequest("POST", "client_post_url", bytes.NewBuffer(requestBody))
        req.Header.Set("Content-Type", "application/json")
        req.Header.Set("Connection", "Keep-Alive")
        response, err := common.Client.Do(req)
        status := 0
        if err != nil {//handle and return}
        defer response.Body.Close() //used with/without io.Copy
        status = response.StatusCode
        body, _ := ioutil.ReadAll(response.Body)
        _, err = io.Copy(ioutil.Discard, response.Body)
Run Code Online (Sandbox Code Playgroud)

我需要重用连接,因此我已经在这样的 init 方法中初始化了 http 客户端和传输全局变量。

    common.Transport = …
Run Code Online (Sandbox Code Playgroud)

go

6
推荐指数
2
解决办法
3500
查看次数

标签 统计

go ×1