Go heap profile 是尝尝用来检查内存泄露和内存占用大问题的问题的手段,而且非常惯用。而且,我们也经常创建两个间隔较长的 heap profile, 获取它们的差值来方便查看内存泄露:Hi, 使用多年的go pprof检查内存泄漏的方法居然是错的?!今天,度厂的一位同学提出了一个很有意思的案例,让我们对 heap profile 有了更深的理解。问题: heap profile 不能正确反应当前分配的内存?这个同学举了一个简单的 Go 程序的例子:1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253packagemainimport("fmt""net/http"_"net/http/pprof""runtime""time")funcmain() {gofunc() {http.ListenAndServe("localhost:8080",nil)}()gofunc() {// 每秒打印内存分配情况for{varm runtime.MemStatsruntime.ReadMemStats(&m;)fmt.Printf("Alloc = %v MiB", bToMb(m.Alloc))fmt.Printf("\tTotalAll
...
继续阅读
(170)