【发布时间】:2017-01-09 07:13:18
【问题描述】:
我们使用 golang 开发了一个服务器,它将接收并发请求并处理请求(创建大对象 - 一棵树),然后发回回复。但是这些对象不是垃圾收集的。所以我决定分析内存中的对象。首先,我写了一个简单的程序
package main
import (
"fmt"
"io/ioutil"
"os"
"runtime/debug"
)
func main() {
var i_am_a int = 10
_ = i_am_a
func() {
f, err := os.Create("dump")
defer f.Close()
if err != nil {
panic(err)
}
debug.WriteHeapDump(f.Fd())
}()
b, err := ioutil.ReadFile("dump")
if err != nil {
panic(err)
}
fmt.Print(string(b))
}
但我无法理解这种表示(https://github.com/golang/go/wiki/heapdump13 - 这没有帮助)。我想要的只是从内存(大对象)回溯到保存对象根地址的位置(go 应用程序代码中的变量)。这样我就可以释放引用并让 GC 在它的循环中收集它。是否有可视化堆转储的最新工具?或者有没有更好的方法来解决这个问题?
【问题讨论】:
-
这个链接可以帮助您进行 Go 内存分析吗? software.intel.com/en-us/blogs/2014/05/10/…
-
@JeandeyBoris,我已经尝试过这些技巧。但是,它们都没有真正的帮助。唯一有用的信息是我无法理解的堆转储。
标签: debugging go garbage-collection heap-dump