PProf 作用

在 Go 语言中,PProf 是用于可视化和分析性能分析数据的工具,PProf 以 profile.proto 读取分析样本的集合,并生成报告以可视化并帮助分析数据(支持文本和图形报告)。

使用

_ “net/http/pprof” 包,专用于采集 web 服务 运行数据的分析。即在运行的服务中通过 API 调用取数据。

package main

import (
	"log"
	"net/http"
	_ "net/http/pprof"
)

func main() {
	go exp.Try(func() {
		log.Println(http.ListenAndServe("0.0.0.0:8089", nil))
	}, func(ex exp.Exception) {
		log.Println(ex.String())
	})
	interfaces.Run()
}

通过 Web API 分析

访问 http://localhost:8089/debug/pprof/ 页面,可以看到总览
点击其中的链接,可以看到各部分的概览

通过 dump 文件进行分析

通过 dump 文件进行分析可以在命令行中交互式分析,也可以通过浏览器进行可视化分析。

通过执行命令 go tool pprof http://localhost:6060/debug/pprof/profile?seconds=60 会进行 60s 内进行采样(默认 30s),进入交互模式

go tool pprof http://localhost:8089/debug/pprof/$type
## $type指各项数据,参数如下:
#CPU 分析(profile): 你可以在 url 上用 seconds 参数指定抽样持续时间(默认 30s),你获取到概览文件后可以用 go tool pprof 命令调查这个概览
#内存分配(allocs): 所有内存分配的抽样
#阻塞(block): 堆栈跟踪导致阻塞的同步原语
#命令行调用(cmdline): 命令行调用的程序
#goroutine: 当前 goroutine 的堆栈信息
#堆(heap): 当前活动对象内存分配的抽样,完全也可以指定 gc 参数在对堆取样前执行 GC
#互斥锁(mutex): 堆栈跟踪竞争状态互斥锁的持有者
#系统线程的创建(threadcreate): 堆栈跟踪系统新线程的创建
#trace: 追踪当前程序的执行状况. 你可以用 seconds 参数指定抽样持续时间. 你获取到 trace 概览后可以用 go tool pprof 命令调查这个 trace
常用指令
#将查看数据导入文件
curl -sk -v http://localhost:8089/debug/pprof/heap >heap.out
#然后用go tool 工具使用该导出文件起一个服务,会自动跳到UI界面。这个需要服务器安装graphviz;
go tool pprof -http=:8080 heap.out

#查看线上快照
curl http://localhost:6060/debug/pprof/profile?seconds=60 >profile.out
go tool pprof profile.out

#查看cpu信息:
go tool pprof http://localhost:8089/debug/pprof/profile
top10 # CPU使用率前10名使用情况
list 函数名 #看到指定函数的代码情况

#查看内存信息:
#可加参数:
#-inuse space:分析应用程序的常驻内存占用情况;
#-alloc_objects:分析应用程序的内存临时分配情况;
go tool pprof http://localhost:8089/debug/pprof/heap
top10

#查看协程使用情况:
go tool pprof http://localhost:8089/debug/pprof/goroutine
traces gopark

#查看trace信息
curl -sk -v http://localhost:8089/debug/pprof/trace >trace.out
go tool trace --http=:8081 trace.out

#待补充。。