主页

索引

模块索引

搜索页面

net/http/pprof

用法1-web服务:

只需要引入包_ "net/http/pprof"
然后就可以在浏览器中使用: http://localhost:port/debug/pprof/
直接看到当前web服务的状态, 包括CPU占用情况和内存使用情况等

用法2-服务进程:

也可以选择使用net/http/pprof包
开启另外一个goroutine来开启端口监听
比如:
go func() {
    log.Println(http.ListenAndServe("localhost:6060", nil))
}()

可通过 http://localhost:6060/debug/pprof/CMD 获取对应的采样数据。支持的 CMD 有:

goroutine:
    获取程序当前所有 goroutine 的堆栈信息
heap:
    包含每个 goroutine 分配大小,分配堆栈等
    每分配 runtime.MemProfileRate(默认为512K)个字节进行一次数据采样
threadcreate:
    获取导致创建 OS 线程的 goroutine 堆栈
block:
    获取导致阻塞的 goroutine 堆栈(如: channel, mutex等)
    使用前需要先调用 runtime.SetBlockProfileRate
mutex:
    获取导致 mutex 争用的 goroutine 堆栈
    使用前需要先调用 runtime.SetMutexProfileFraction

http://localhost:6060/debug/pprof/goroutine?debug=2:

有相似的返回值(goroutine 堆栈),它们都支持一个 debug URL参数
1. 默认为0,此时返回的采样数据是不可人为解读的函数地址列表,需要结合 pprof 工具才能还原函数名字
2. debug=1时,会将函数地址转换为函数名,即脱离 pprof 在浏览器中直接查看
3. debug=2,此时将以 unrecovered panic 的格式打印堆栈,可读性更高

除此之外,go pprof 的 CMD 还包括:

cmdline:
    获取程序的命令行启动参数
profile:
    获取指定时间内(从请求时开始)的cpuprof,倒计时结束后自动返回
    参数: seconds, 默认值为30。cpuprofile 每秒钟采样100次,收集当前运行的 goroutine 堆栈信息
symbol:
    用于将地址列表转换为函数名列表,地址通过’+’分隔,
    如: URL/debug/pprof?0x18d067f+0x17933e7
trace:
    对应用程序进行执行追踪,参数: seconds, 默认值1s

主页

索引

模块索引

搜索页面