我們開發了一個使用golang的服務器,它將接收併發請求並處理請求(創建大對象 - 樹),然後發回回覆。但這些物體並不是垃圾收集的。所以我決定分析存儲器中的物體。首先,我寫了一個簡單的程序如何可視化heapdump?
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 - 這並沒有幫助)。我只需要從內存(大對象)追溯到保存對象根地址的位置(在應用程序代碼中變量)。這樣我可以釋放參考並讓GC在它的循環中收集它。是否有最新的工具可視化heapdump?還是有更好的方法來解決這個問題?
此鏈接可以幫助您進行Go記憶分析嗎? https://software.intel.com/zh-cn/blogs/2014/05/10/debugging-performance-issues-in-go-programs –
@JeandeyBoris,我已經嘗試過這些技巧。但是,他們都沒有幫助。只有信息可以幫助我無法理解的Heap Dump。 – Spartan