gpt4 book ai didi

go - 循环调用中的Golang内存泄漏

转载 作者:数据小太阳 更新时间:2023-10-29 03:42:42 26 4
gpt4 key购买 nike

我正在运行对远程服务器的调用,作为代理,此调用应每5分钟运行一次,但在测试中,我每秒钟运行一次。我看到一个内存泄漏,正在努力解决它。
守则的要点如下:

 // Set the initial payload to be sent
payloadBytes, err := json.Marshal(data)
if err != nil { log.Print("Failed Marshal", err) }
transport := &http.Transport{ DisableKeepAlives: true }
client := http.Client{Transport: transport}

// Repeat the post call to the remote server
repeatTicker := time.NewTicker(1 * time.Second)
for {
select {
case <- repeatTicker.C:
body := bytes.NewReader(payloadBytes)
log.Print("Sending:", string(payloadBytes))
postCycle(client, body)
}
}
transport.CloseIdleConnections()
}

func postCycle(client http.Client , body *bytes.Reader){
resp, err := client.Post("http://mywebsite.io/api", "application/json", body)
if err != nil { log.Print("Failed to Connect",err) }
responseData, err := ioutil.ReadAll(resp.Body)
if err != nil { log.Print("Response contains Errors", err) }
resp.Body.Close()
}

我发现,传输被打开一次并被重用,但是resp.body.close()似乎没有达到预期的效果,内存计数继续增加。返回的数据是发送数据的回音,所以这永远不会改变。我是不是遗漏了什么东西?或者,当垃圾收集赶上时,内存计数是否会超过上限并保持不可用?

最佳答案

内存泄漏看起来很可能,但是在运行了一段时间的例程之后,内存的使用就稳定下来了,所以这对于清理对象和不耗尽所有可用内存是正确的。

关于go - 循环调用中的Golang内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53063268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com