首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个猩猩的内存消耗

多个猩猩的内存消耗
EN

Stack Overflow用户
提问于 2015-08-03 13:39:41
回答 1查看 915关注 0票数 2

我安装了一个用Go写的http服务器,每天有上千名访客。我有一个不断积累的戈鲁丁问题(从来没有得到解放)。在一天的时间里,我似乎从http服务器上得到了一千多个新的Goroutines,我使用pprof来检查问题的来源,我得到了这样的结果:

链接:内存消耗: SVG pprof

堆:

下面是我的两个大猩猩

代码语言:javascript
复制
500 @ 0x410255 0x5a9255 0x5a9e25 0x5aa615 0x5990cf 0x5ada95 0x59d23f 0x4367b1
#   0x5a9255    net._C2func_getaddrinfo+0x55    /usr/local/go/src/net/:26
#   0x5a9e25    net.cgoLookupIPCNAME+0x1c5  /usr/local/go/src/net/cgo_unix.go:96
#   0x5aa615    net.cgoLookupIP+0x65        /usr/local/go/src/net/cgo_unix.go:148
#   0x5990cf    net.lookupIP+0x5f       /usr/local/go/src/net/lookup_unix.go:64
#   0x5ada95    net.func·026+0x55       /usr/local/go/src/net/lookup.go:79
#   0x59d23f    net.(*singleflight).doCall+0x2f /usr/local/go/src/net/singleflight.go:91

157871 @ 0x423985 0x4239f8 0x411464 0x410c93 0x5a9d68 0x5aa615 0x5990cf 0x5ada95 0x59d23f 0x4367b1
#   0x5a9d68    net.cgoLookupIPCNAME+0x108  /usr/local/go/src/net/cgo_unix.go:85
#   0x5aa615    net.cgoLookupIP+0x65        /usr/local/go/src/net/cgo_unix.go:148
#   0x5990cf    net.lookupIP+0x5f       /usr/local/go/src/net/lookup_unix.go:64
#   0x5ada95    net.func·026+0x55       /usr/local/go/src/net/lookup.go:79
#   0x59d23f    net.(*singleflight).doCall+0x2f /usr/local/go/src/net/singleflight.go:91

在这里我们可以看到,singleflight.go占据了大部分的goroutints,它是一个Go的本地库。

我的代码在这个函数中乱七八糟

代码语言:javascript
复制
func getXmlVast(url string) (string, error) {
    resp, err := http.Get(url)
    if err != nil {
        return "", errors.New("request error A(" + err.Error() + ")")
    }
    defer resp.Body.Close()
    // read xml http response
    xmlData, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        return "", errors.New("request error B(" + err.Error() + ")")
    }
    return string(xmlData), nil
}

为什么Go从来没有解放过大猩猩,以及singleflight.go做了什么。

EN

回答 1

Stack Overflow用户

发布于 2015-08-07 08:54:45

我更新了我的围棋版本从1.4到1.5,它解决了问题。

我以前做过一些研究,找出问题的来源,我注意到很多人都有同样的问题,但没有人知道为什么。我认为问题出在http/net库中,因为正如我在问题中所说的,使用单飞的函数最多,这个函数是http.Get(url)调用的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31788888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档