Мы разработали сервер, использующий 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))
}
Но я не мог понять representaion (https://github.com/golang/go/wiki/heapdump13 - это не помогло). Все, что я хотел - это отследить назад из памяти (большой объект) в место (переменная в коде приложения go), которая содержит корневой адрес объекта. Чтобы я мог освободить ссылку и позволить GC собирать ее в своем цикле. Есть ли новый инструмент для визуализации heapdump? или Есть ли лучший подход к этой проблеме?
Может ли эта ссылка помочь вам в анализе Go Go? https://software.intel.com/en-us/blogs/2014/05/10/debugging-performance-issues-in-go-programs –
@JeandeyBoris, я уже пробовал эти трюки. Но никто из них не помогает. Только информация, которая поможет, - это куча кучи, которую я не мог понять. – Spartan