是否可以在 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 只显示 10MB?怎么了
globalByteArray2?

