小编Den*_*ton的帖子

在http.Get之后Go不会释放内存

我正在使用简单的线程池加载网页,同时从文件动态加载网址.但是这个小程序慢慢分配与我的服务器一样多的内存,直到omm杀手停止它.它看起来像resp.Body.Close()不释放正文的内存(内存大小〜下载页面*平均页面大小).如何强制golang释放为body html文本分配的内存?

package main

import (
    "bufio"
    "fmt"
    "io/ioutil"
    "net/http"
    "os"
    "strings"
    "sync"
)

func worker(linkChan chan string, wg *sync.WaitGroup) {
    defer wg.Done()

    for url := range linkChan {
        // Getting body text
        resp, err := http.Get(url)
        if err != nil {
            fmt.Printf("Fail url: %s\n", url)
            continue
        }
        body, err := ioutil.ReadAll(resp.Body)
        resp.Body.Close()
        if err != nil {
            fmt.Printf("Fail url: %s\n", url)
            continue
        }
        // Test page body
        has_rem_code := strings.Contains(string(body), "googleadservices.com/pagead/conversion.js")
        fmt.Printf("Done url: %s\t%t\n", url, has_rem_code)
    }
}

func …
Run Code Online (Sandbox Code Playgroud)

memory-leaks http go

6
推荐指数
1
解决办法
908
查看次数

标签 统计

go ×1

http ×1

memory-leaks ×1