pprof包以pprof可视化工具期望的格式书写运行时剖面数据。
pprof的更多信息参见http://code.google.com/p/google-perftools/

func Profiles() []*Profile 返回所有已知profile的切片,按名称排序

func StartCPUProfile(w io.Writer) error 开启CPU profile,如果已开启,返回错误

func StopCPUProfile() 停止当前的CPU profile

func WriteHeapProfile(w io.Writer) error 是Lookup(“heap”).WriteTo(w, 0) 的简写

type Profile

Profile是一个调用栈踪迹的集合,显示导致特定事件(如内存分配)的实例的调用栈序列。包可以创建并维护它们自己的profile;它一般用于跟踪必须被显式关闭的资源,例如文件或网络连接。
一个Profile的方法可被多个Go程同时调用。
每个Profile都有唯一的名称。有些Profile是预定义的:

  • goroutine - 当前Go所有程的调用栈踪迹
  • heap - 所有堆分配的采样
  • threadcreate - 导致新的OS线程创建的调用栈踪迹
  • block - 导致同步原语水平的阻塞的调用栈踪迹

CPU profile不能作为Profile使用。它有专门的API,即StartCPUProfile和StopCPUProfile函数,因为它在分析时是以流的形式输出到writer中的。

  1. type Profile struct {
  2. // 内含隐藏或非导出字段
  3. }

func Lookup(name string) *Profile 返回具有指定名字的Profile;如果没有,会返回nil

func NewProfile(name string) *Profile 以给定的名称创建一个新的Profile,如果已存在,直接panic

func (p *Profile) Name() string 返回该Profile的名称

func (p *Profile) Count() int 返回该Profile中当前执行栈的数量

func (p *Profile) WriteTo(w io.Writer, debug int) error

  • 函数将pprof格式的profile快照写入w中。若一个向w的写入返回一个错误,WriteTo就会返回该错误
  • debug 参数用于开启附加的输出
    • 如果debug=0:只会打印pprof所需要的十六进制地址
    • 如果debug=1:会将地址翻译为函数名和行号并添加注释,以便让程序员无需工具阅读分析报告
    • debug=2:由于不可恢复的恐慌而濒临崩溃时,使用与Go程序相同的格式打印Go程的堆栈信息(更详细)