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中的。
type Profile struct {
// 内含隐藏或非导出字段
}
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程的堆栈信息(更详细)