主页

索引

模块索引

搜索页面

memprofile

操作:

$ go build -o havlak3 havlak3.go
$ ./havlak3 --memprofile=havlak3.mprof
$ go tool pprof havlak3 havlak3.mprof
File: havlak3
Type: inuse_space
Time: Apr 3, 2018 at 3:44pm (CST)
Entering interactive mode (type "help" for commands, "o" for options)
(pprof)

查看内存 消耗 top5:

(pprof)top
Showing nodes accounting for 57.39MB, 100% of 57.39MB total
    flat  flat%   sum%        cum   cum%
 39.60MB 69.00% 69.00%    39.60MB 69.00%  main.FindLoops /Code/goprof/havlak/havlak3.go
 11.29MB 19.67% 88.67%    11.29MB 19.67%  main.(*CFG).CreateNode /Code/goprof/havlak/havlak3.go
  6.50MB 11.33%   100%    17.79MB 31.00%  main.NewBasicBlockEdge /Code/goprof/havlak/havlak3.go
       0     0%   100%    39.60MB 69.00%  main.FindHavlakLoops /Code/goprof/havlak/havlak3.go
       0     0%   100%    17.79MB 31.00%  main.buildBaseLoop /Code/goprof/havlak/havlak3.go

memprofile 也就是 heap 采样数据,go tool pprof 默认显示的是使用的内存的大小,如果想要显示使用的堆对象的个数,则通过:

go tool pprof --inuse_objects havlak3 havlak3.mprof

其它参数还有 --alloc_objects--alloc_space ,分别是分配的堆内存大小和对象个数。在本例中,FindLoops 函数分配了39.60M 堆内存,占到69%,同样,接下来是通过list FindLoops对函数代码进行 review,找出关键数据结构,进行优化。

主页

索引

模块索引

搜索页面