Pprof替代库:pkg Profile
文章目录
简介
Go 运行时的分析接口存在于 runtime/pprof 包中。 runtime/pprof 是一个非常低级的工具,由于历史原因,不同类型 profile 的接口并不统一,而且使用起来还不是太方便,例如:输出数据使用 io.Writer 接口,虽然扩展性很强,但是对于实际使用不够方便,不支持写入文件,默认配置项较为复杂。
引入 github.com/pkg/profile 包,在需要测试的程序代码前面加入下面代码:
|
|
使用 profile.Start 调用 github.com/pkg/profile 包的开启性能分析接口。
这个 Start 函数的参数都是可选项,这里需要指定的分析项目是 profile.CPUProfile,也就是 CPU 耗用。如果分析内存分配情况,则所传参数改为 profile.MemProfile。
profile.ProfilePath(".") 指定输出的分析文件路径,这里指定为当前文件夹。profile.Start() 函数会返回一个 Stop 接口,方便在程序结束时结束性能分析。为了保证性能分析数据的合理性,分析的最短时间是 1 秒,使用 time.Sleep() 在程序结束前等待 1 秒。如果你的程序默认可以运行 1 秒以上,这个等待可以去掉。
相关API
Constants
|
|
DefaultMemProfileRate是默认的内存分析速率.
pprof每分配 runtime.MemProfileRate(默认为512K) 个字节进行一次数据采样。
func BlockProfile
|
|
BlockProfile启用锁(争用)性能分析。它禁用任何以前的性能分析设置。
func CPUProfile
|
|
CPUProfile启用cpu分析。它禁用任何以前的性能分析设置。
Example
Code:
|
|
func GoroutineProfile
|
|
GoroutineProfile启用goroutine分析。它禁用任何以前的性能分析设置。
func MemProfile
|
|
MemProfile启用内存分析。它禁用任何以前的性能分析设置。
Example
Code:
|
|
func MemProfileRate
|
|
MemProfileRate以指定速率启用内存分析。它禁用任何以前的性能分析设置。
Example
Code:
|
|
func MutexProfile
|
|
MutexProfile启用互斥分析。它禁用任何以前的性能分析设置。
func NoShutdownHook
|
|
NoShutdownHook控制配置文件包是否应挂接SIGINT以干净地编写配置文件。具有更复杂信号处理能力的程序应将其设置为true,并确保在关机期间调用从Start()返回的Stop()函数。
Example
Code:
|
|
func ProfilePath
|
|
ProfilePath控制着写入各种性能分析文件的基本路径。如果为空,则基本路径将由ioutil.TempDir生成。
Example
Code:
|
|
func Quiet
|
|
Quiet禁止在分析过程中提供参考消息。
func Start
|
|
Start将启动一个新的性能分析会话。调用方应在返回的值上调用Stop方法以完全停止分析。
Example
Code:
|
|
Example (WithFlags)
Code:
|
|
func ThreadcreationProfile
|
|
ThreadcreationProfile启用线程创建性能分析。它禁用任何以前的性能分析设置。
func TraceProfile
|
|
跟踪配置文件启用执行跟踪。它禁用任何以前的性能分析设置。
Example
Code:
|
|
type Profile
|
|
概要文件表示活动的概要分析会话
func (*Profile) Stop
|
|
Stop将停止配置文件并刷新所有未写入的数据。
文章作者 Forz
上次更新 2020-02-01