go tool 分析内存信息

可以使用go tool分析CPU、内存占用情况时,pprof进行分析相关的cpu占用情况和内存占用情况:
可以使用 go tool pprof binary profile 对内存或是cpu的二进制文件进行分析:
举例:

 go tool pprof memprofile 

memprofile 就是我们导出的内存信息的二进制文件,导出的代码为:

// cpuFile 是cpu导出的使用信息的文件可带目录 memFile 内存文件
util.SetupProfiling(*cpuFile, *memFile) 
 func SetupProfiling(cpuProfile, memProfile string) {
    if cpuProfile != "" {
        f, err := os.Create(cpuProfile)
        if err != nil {
            glog.Fatal(err)
        }
        pprof.StartCPUProfile(f)
        OnInterrupt(func() {
            pprof.StopCPUProfile()
        })
    }
    if memProfile != "" {
                // 此处默认配置为512kb,即每512kb写一次heapprofile
        runtime.MemProfileRate = 1
        f, err := os.Create(memProfile)
        if err != nil {
            glog.Fatal(err)
        }
                // 此处封装了一些方法会去做一次内存的刷新,如停止服务时
        OnInterrupt(func() {
            pprof.WriteHeapProfile(f)
            f.Close()
        })
    }
}

通过命令查看:

 $ go tool pprof memprofile 
38812.64kB 73.11% 73.11% 38812.64kB 73.11%  github.com/chrislusf/seaweedfs/weed/storage/needle_map.NewCompactSection
   13720kB 25.84% 98.95%    13720kB 25.84%  github.com/chrislusf/seaweedfs/weed/storage/needle_map.(*CompactSection).setOverflowEntry
    7.22kB 0.014% 98.96% 49202.13kB 92.68%  github.com/chrislusf/seaweedfs/weed/storage.NewVolume
    1.97kB 0.0037% 98.97% 49194.91kB 92.66%  github.com/chrislusf/seaweedfs/weed/storage.(*Volume).load
    0.98kB 0.0019% 98.97% 49203.13kB 92.68%  github.com/chrislusf/seaweedfs/weed/storage.(*DiskLocation).loadExistingVolume
    0.29kB 0.00054% 98.97% 52532.93kB 98.95%  github.com/chrislusf/seaweedfs/weed/storage/needle_map.(*CompactMap).Set
    0.19kB 0.00035% 98.97% 49203.32kB 92.68%  github.com/chrislusf/seaweedfs/weed/storage.(*DiskLocation).concurrentLoadingVolumes.func2
    0.05kB 8.8e-05% 98.97%  3394.50kB  6.39%  net/http.(*conn).serve
         0     0% 98.97%  3363.91kB  6.34%  github.com/chrislusf/seaweedfs/weed/server.(*VolumeServer).PostHandler
         0     0% 98.97%  3363.91kB  6.34%  github.com/chrislusf/seaweedfs/weed/server.(*VolumeServer).privateStoreHandler

可以使用以下命令查看使用详情:

$ go tool pprof --help
usage:

Produce output in the specified format.

   pprof <format> [options] [binary] <source> ...

Omit the format to get an interactive shell whose commands can be used
to generate various views of a profile

   pprof [options] [binary] <source> ...

Omit the format and provide the "-http" flag to get an interactive web
interface at the specified host:port that can be used to navigate through
various views of a profile.

   pprof -http [host]:[port] [options] [binary] <source> ...

Details:
  Output formats (select at most one):
    -callgrind       Outputs a graph in callgrind format
    -comments        Output all profile comments
    -disasm          Output assembly listings annotated with samples
    -dot             Outputs a graph in DOT format
    -eog             Visualize graph through eog
    -evince          Visualize graph through evince
    -gif             Outputs a graph image in GIF format
    -gv              Visualize graph through gv
    -kcachegrind     Visualize report in KCachegrind
    -list            Output annotated source for functions matching regexp
    -pdf             Outputs a graph in PDF format
    -peek            Output callers/callees of functions matching regexp
    -png             Outputs a graph image in PNG format
    -proto           Outputs the profile in compressed protobuf format
    -ps              Outputs a graph in PS format
    -raw             Outputs a text representation of the raw profile
    -svg             Outputs a graph in SVG format
    -tags            Outputs all tags in the profile
    -text            Outputs top entries in text form
    -top             Outputs top entries in text form
    -topproto        Outputs top entries in compressed protobuf format
    -traces          Outputs all profile samples in text form
    -tree            Outputs a text rendering of call graph
    -web             Visualize graph through web browser
    -weblist         Display annotated source in a web browser

  Options:
    -call_tree       Create a context-sensitive call tree
    -compact_labels  Show minimal headers
    -divide_by       Ratio to divide all samples before visualization
    -drop_negative   Ignore negative differences
    -edgefraction    Hide edges below <f>*total
    -focus           Restricts to samples going through a node matching regexp
    -hide            Skips nodes matching regexp
    -ignore          Skips paths going through any nodes matching regexp
    -mean            Average sample value over first value (count)
    -nodecount       Max number of nodes to show
    -nodefraction    Hide nodes below <f>*total
    -noinlines       Ignore inlines.
    -normalize       Scales profile based on the base profile.
    -output          Output filename for file-based outputs
    -prune_from      Drops any functions below the matched frame.
    -relative_percentages Show percentages relative to focused subgraph
    -sample_index    Sample value to report (0-based index or name)
    -show            Only show nodes matching regexp
    -show_from       Drops functions above the highest matched frame.
    -source_path     Search path for source files
    -tagfocus        Restricts to samples with tags in range or matched by regexp
    -taghide         Skip tags matching this regexp
    -tagignore       Discard samples with tags in range or matched by regexp
    -tagshow         Only consider tags matching this regexp
    -trim            Honor nodefraction/edgefraction/nodecount defaults
    -trim_path       Path to trim from source paths before search
    -unit            Measurement units to display

  Option groups (only set one per group):
    cumulative       
      -cum             Sort entries based on cumulative weight
      -flat            Sort entries based on own weight
    granularity      
      -addresses       Aggregate at the address level.
      -filefunctions   Aggregate at the function level.
      -files           Aggregate at the file level.
      -functions       Aggregate at the function level.
      -lines           Aggregate at the source code line level.

  Source options:
    -seconds              Duration for time-based profile collection
    -timeout              Timeout in seconds for profile collection
    -buildid              Override build id for main binary
    -add_comment          Free-form annotation to add to the profile
                          Displayed on some reports or with pprof -comments
    -diff_base source     Source of base profile for comparison
    -base source          Source of base profile for profile subtraction
    profile.pb.gz         Profile in compressed protobuf format
    legacy_profile        Profile in legacy pprof format
    http://host/profile   URL for profile handler to retrieve
    -symbolize=           Controls source of symbol information
      none                  Do not attempt symbolization
      local                 Examine only local binaries
      fastlocal             Only get function names from local binaries
      remote                Do not examine local binaries
      force                 Force re-symbolization
    Binary                  Local path or build id of binary for symbolization
    -tls_cert             TLS client certificate file for fetching profile and symbols
    -tls_key              TLS private key file for fetching profile and symbols
    -tls_ca               TLS CA certs file for fetching profile and symbols

  Misc options:
   -http              Provide web based interface at host:port.
                      Host is optional and 'localhost' by default.
                      Port is optional and a randomly available port by default.
   -tools             Search path for object tools

  Legacy convenience options:
   -inuse_space           Same as -sample_index=inuse_space
   -inuse_objects         Same as -sample_index=inuse_objects
   -alloc_space           Same as -sample_index=alloc_space
   -alloc_objects         Same as -sample_index=alloc_objects
   -total_delay           Same as -sample_index=delay
   -contentions           Same as -sample_index=contentions
   -mean_delay            Same as -mean -sample_index=delay

  Environment Variables:
   PPROF_TMPDIR       Location for saved profiles (default $HOME/pprof)
   PPROF_TOOLS        Search path for object-level tools
   PPROF_BINARY_PATH  Search path for local binary files
                      default: $HOME/pprof/binaries
                      searches $name, $path, $buildid/$name, $path/$buildid
   * On Windows, %USERPROFILE% is used instead of $HOME
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在计算机性能调试领域里,profiling 是指对应用程序的画像,画像就是应用程序使用 CPU 和内存的情况。 G...
    雪上霜阅读 937评论 0 1
  • 概要 profile就是定时采样,收集cpu,内存等信息,进而给出性能优化指导,golang 官方提供了golan...
    糖果果老师阅读 9,038评论 0 6
  • 本文作者欧长坤,德国慕尼黑大学在读博士,Go/etcd/Tensorflow contributor,开源书籍《G...
    水表学Java阅读 458评论 0 0
  • 1. 概述 在 go 语言中,主要关注的应用运行情况主要包括以下几种: CPU Profiling:CPU 分析,...
    northking阅读 578评论 0 0
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,573评论 16 22