...

Package pprof

import "runtime/pprof"
概览
索引

概览 ▾

pprof 包按照可视化工具 pprof 所要求的格式写出运行时分析数据. 更多有关 pprof 的信息见 http://code.google.com/p/google-perftools/

func Profiles

func Profiles() []*Profile

Profiles 返回所有已知分析的切片,按名称排序。

func StartCPUProfile

func StartCPUProfile(w io.Writer) error

StartCPUProfile 为当前进程开启CPU分析。 在分析时,分析报告会缓存并写入到 w 中。若分析已经开启,StartCPUProfile 就会返回错误。

func StartTrace

func StartTrace(w io.Writer) error

TODO(rsc): Decide if StartTrace belongs in this package. See golang.org/issue/9710. StartTrace enables tracing for the current process. While tracing, the trace will be buffered and written to w. StartTrace returns an error if profiling is tracing enabled.

func StopCPUProfile

func StopCPUProfile()

StopCPUProfile 会停止当前的CPU分析,如果有的话。 StopCPUProfile 只会在所有的分析报告写入完毕后才会返回。

func StopTrace

func StopTrace()

StopTrace stops the current tracing, if any. StopTrace only returns after all the writes for the trace have completed.

func WriteHeapProfile

func WriteHeapProfile(w io.Writer) error

WriteHeapProfile 是 Lookup("heap").WriteTo(w, 0) 的简写。 它是为了保持向后兼容性而存在的。

type Profile

type Profile struct {
    // contains filtered or unexported fields
}

Profile 是一个栈跟踪的集合,它显示了引导特定事件实例的调用序列,例如分配。 包可以创建并维护它们自己的分析,它一般用于跟踪必须被显式关闭的资源,例如文件或网络连接。

一个 Profile 的方法可被多个Go程同时调用。

每个 Profile 都有唯一的名称。有些 Profile 是预定义的:

goroutine    - 所有当前Go程的栈跟踪
heap         - 所有堆分配的采样
threadcreate - 引导新OS的线程创建的栈跟踪
block        - 引导同步原语中阻塞的栈跟踪

这些预声明分析并不能作为 Profile 使用。它有专门的API,即 StartCPUProfile 和 StopCPUProfile 函数,因为它在分析时是以流的形式输出到写入器的。

func Lookup

func Lookup(name string) *Profile

Lookup 返回给定名称的分析,若不存在该分析,则返回 nil。

func NewProfile

func NewProfile(name string) *Profile

NewProfile 以给定的名称创建一个新的分析。 若拥有该名称的分析已存在,NewProfile 就会引起恐慌。 约定使用一个 'import/path' 导入路径前缀来为每个包创建单独的命名空间。

func (*Profile) Add

func (p *Profile) Add(value interface{}, skip int)

Add 将当前与值相关联的执行栈添加到该分析中。 Add 在一个内部映射中存储值,因此值必须适于用作映射键,且在对应的 Remove 调用之前不会被垃圾收集。若分析已经包含了值的栈,Add 就会引发恐慌。

skip 形参与 runtime.Caller 的 skip 意思相同,它用于控制栈跟踪从哪里开始。 传入 skip=0 会从函数调用 Add 处开始跟踪。例如,给定以下执行栈:

Add
调用自 rpc.NewClient
调用自 mypkg.Run
调用自 main.main

传入 skip=0 会从 rpc.NewClient 中的 Add 调用处开始栈跟踪。 传入 skip=1 会从 mypkg.Run 中的 NewClient 调用处开始栈跟踪。

func (*Profile) Count

func (p *Profile) Count() int

Count 返回该分析中当前执行栈的数量。

func (*Profile) Name

func (p *Profile) Name() string

Name 返回该分析的名称,它可被传入 Lookup 来重新获取该分析。

func (*Profile) Remove

func (p *Profile) Remove(value interface{})

Remove 从该分析中移除与值 value 相关联的执行栈。 若值 value 不在此分析中,则为空操作。

func (*Profile) WriteTo

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

WriteTo 将pprof格式的分析快照写入 w 中。 若一个向 w 的写入返回一个错误,WriteTo 就会返回该错误。 否则,WriteTo 就会返回 nil。

debug 形参用于开启附加的输出。 传入 debug=0 只会打印pprof所需要的十六进制地址。 传入 debug=1 会将地址翻译为函数名和行号并添加注释,以便让程序员无需工具阅读分析报告。

预声明分析报告可为其它 debug 值赋予含义;例如,当打印“Go程”的分析报告时, debug=2 意为:由于不可恢复的恐慌而濒临崩溃时,使用与Go程序相同的形式打印Go程的栈信息。

Bugs