3

是否可以在 Go 中找出全局变量的内存使用情况?

例如看看这段代码:

package main

import (
    "fmt"
    "math/rand"
    _ "net/http/pprof"
    "os"
    "runtime"
    "runtime/pprof"
    "time"
)

var globalByteArray1, globalByteArray2 []byte

func main() {
    rand.Seed(time.Now().Unix())
    globalByteArray1 = make([]byte, 10*1024*1024)
    rand.Read(globalByteArray1)
    memoryUsage()
    globalByteArray2 = make([]byte, 20*1024*1024)
    rand.Read(globalByteArray2)
    memoryUsage()
    fmt.Println(globalByteArray1[len(globalByteArray1)-1], globalByteArray2[len(globalByteArray2)-1])
    file, _ := os.Create("heap")
    pprof.WriteHeapProfile(file)
    file.Close()
    fmt.Println(globalByteArray1[len(globalByteArray1)-1], globalByteArray2[len(globalByteArray2)-1])
}

func memoryUsage() {
    var m runtime.MemStats
    runtime.ReadMemStats(&m)
    fmt.Println(m.Alloc/1024/1024, "MB")
}

此代码打印以下输出,这很好。

10 MB
30 MB
209 214
209 214

我心想也许pprof可以向我展示全局变量。但这实际上让我更加困惑。

pprof图 pprof-火焰

所以我有两个问题:

  1. 我可以分析全局变量并查看每个变量的内存使用情况吗?
  2. 为什么 pprof 只显示 10MB?怎么了globalByteArray2
4

0 回答 0