【发布时间】:2019-06-10 02:40:35
【问题描述】:
为 50 个 5 MB 的请求分配了数百 MB 的内存。内存已分配,不再释放。 我怎样才能清除我的记忆?为什么会发生这种情况?
我已经在我的家用电脑和 VPS 上尝试过 Ubuntu
package main
import (
"fmt"
"io/ioutil"
"net/http"
"time"
)
func main() {
fmt.Println("start")
for i := 0; i < 50; i++ {
go func() {
DoRequest()
}()
time.Sleep(10 * time.Millisecond)
}
time.Sleep(10 * time.Minute)
}
func DoRequest() error {
requestUrl := "https://blockchain.info/rawblock/0000000000000000000eebedea046425bd54626e6c56eb032e66e714d0141ea6"
req, err := http.NewRequest("GET", requestUrl, nil)
if err != nil {
return err
}
req.Header.Set("user-agent", "free")
httpClient := &http.Client{
Timeout: time.Second * 10,
}
resp, err := httpClient.Do(req)
if resp != nil {
defer resp.Body.Close()
}
if err != nil {
return err
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return err
}
fmt.Println("bodylen", len(body))
return nil
}
分配到某处 400MB
【问题讨论】:
-
分配是正常的。保持它直到系统上有足够的内存压力供操作系统回收它是正常的。你有什么问题?
标签: go memory memory-leaks