Open cyningsun opened 4 years ago
请教个问题,为啥内存profile是执行一次就退出?cpu profile可以整个执行完再退出?
@DavidYanXW 请教个问题,为啥内存profile是执行一次就退出?cpu profile可以整个执行完再退出?
跟机制相关,内存 profile 是镜像某个点的内存情况;CPU profile 是要以一定的频率采样 CPU 正在执行的内容,需要持续一段时间。
@cyningsun
@DavidYanXW 请教个问题,为啥内存profile是执行一次就退出?cpu profile可以整个执行完再退出?
跟机制相关,内存 profile 是镜像某个点的内存情况;CPU profile 是要以一定的频率采样 CPU 正在执行的内容,需要持续一段时间。
内存profile可以是某个时刻的内存情况,那能是整个程序执行完的时候吗? 我看文章的意思好像是只能循环一次?
@DavidYanXW
@cyningsun
@DavidYanXW 请教个问题,为啥内存profile是执行一次就退出?cpu profile可以整个执行完再退出?
跟机制相关,内存 profile 是镜像某个点的内存情况;CPU profile 是要以一定的频率采样 CPU 正在执行的内容,需要持续一段时间。
内存profile可以是某个时刻的内存情况,那能是整个程序执行完的时候吗? 我看文章的意思好像是只能循环一次?
执行完的时候? 没有特别的理解,你能介绍下使用场景么?
@cyningsun
@DavidYanXW
@cyningsun
@DavidYanXW 请教个问题,为啥内存profile是执行一次就退出?cpu profile可以整个执行完再退出?
跟机制相关,内存 profile 是镜像某个点的内存情况;CPU profile 是要以一定的频率采样 CPU 正在执行的内容,需要持续一段时间。
内存profile可以是某个时刻的内存情况,那能是整个程序执行完的时候吗? 我看文章的意思好像是只能循环一次?
执行完的时候? 没有特别的理解,你能介绍下使用场景么?
havlak3.go
FindHavlakLoops(cfgraph, lsgraph)
if *memprofile != "" {
f, err := os.Create(*memprofile)
if err != nil {
log.Fatal(err)
}
pprof.WriteHeapProfile(f)
f.Close()
return
}
for i := 0; i < 50; i++ {
FindHavlakLoops(cfgraph, NewLSG())
}
pprof.WriteHeapProfile(f)能放在for i := 0; i < 50; i++ {}循环后面吗? 或者更简单一些,放在defer里面,等待整个main()函数执行完的时候处理?
@DavidYanXW
@cyningsun
@DavidYanXW
@cyningsun
@DavidYanXW 请教个问题,为啥内存profile是执行一次就退出?cpu profile可以整个执行完再退出?
跟机制相关,内存 profile 是镜像某个点的内存情况;CPU profile 是要以一定的频率采样 CPU 正在执行的内容,需要持续一段时间。
内存profile可以是某个时刻的内存情况,那能是整个程序执行完的时候吗? 我看文章的意思好像是只能循环一次?
执行完的时候? 没有特别的理解,你能介绍下使用场景么?
havlak3.go
FindHavlakLoops(cfgraph, lsgraph) if memprofile != "" { f, err := os.Create(memprofile) if err != nil { log.Fatal(err) } pprof.WriteHeapProfile(f) f.Close() return }
for i := 0; i < 50; i++ { FindHavlakLoops(cfgraph, NewLSG()) }
pprof.WriteHeapProfile(f)能放在for i := 0; i < 50; i++ {}循环后面吗? 或者更简单一些,放在defer里面,等待整个main()函数执行完的时候处理?
可以的。但是 Profile 出来的内容是不同的,因为 for loop 里使用了 cfgraph 的变量
https://cyningsun.github.io/07-20-2019/profiling-go-programs-cn.html
博学、慎思、明辨、笃行