Я выполняю вызов на удаленный сервер, поскольку в качестве агента этот вызов должен выполняться каждые 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 (), похоже, не дает желаемого эффекта, и количество памяти продолжает расти. Возвращаемые данные являются эхом отправленных данных, поэтому они никогда не меняются. Я что-то здесь упускаю? или количество памяти увеличится и будет сохранено после сбора мусора?