[TOC]
## PProf 是什么
在 Go 语言中,PProf 是用于可视化和分析性能分析数据的工具,PProf 以 profile.proto 读取分析样本的集合,并生成报告以可视化并帮助分析数据(支持文本和图形报告)。
## 有哪几种采样方式
* runtime/pprof:采集程序(非 Server)的指定区块的运行数据进行分析。
* net/http/pprof:基于HTTP Server运行,并且可以采集运行时数据进行分析。
* go test:通过运行测试用例,并指定所需标识来进行采集。
## 可以做什么
* CPU Profiling:CPU 分析,按照一定的频率采集所监听的应用程序 CPU(含寄存器)的使用情况,可确定应用程序在主动消耗 CPU 周期时花费时间的位置。
* Memory Profiling:内存分析,在应用程序进行堆分配时记录堆栈跟踪,用于监视当前和历史内存使用情况,以及检查内存泄漏。
* Block Profiling:阻塞分析,记录Goroutine阻塞等待同步(包括定时器通道)的位置,默认不开启,需要调用`runtime.SetBlockProfileRate`进行设置。
* Mutex Profiling:互斥锁分析,报告互斥锁的竞争情况,默认不开启,需要调用`runtime.SetMutexProfileFraction`进行设置。
* Goroutine Profiling:Goroutine 分析,可以对当前应用程序正在运行的 Goroutine 进行堆栈跟踪和分析。
## 页面展示
### 常见命令
命令:go tool pprof http://xxxxx:prot/debug/pprof
图形化代码追踪:在交互的命令行输入web就可以了(前提安装:[graphviz](https://graphviz.gitlab.io/_pages/Download/Download_windows.html))
>top N 查看消耗排行
![](https://img.kancloud.cn/09/73/0973154768fc61604342da2a2b88f10e_779x464.png)
### 图文
![](https://img.kancloud.cn/04/2d/042d61a0a2bc3c8b47847035aaf628ce_578x495.png)
* allocs:查看过去所有内存分配的样本,访问路径为`$HOST/debug/pprof/allocs`。
* block:查看导致阻塞同步的堆栈跟踪,访问路径为`$HOST/debug/pprof/block`。
* cmdline:当前程序的命令行的完整调用路径。
* goroutine:查看当前所有运行的 goroutines 堆栈跟踪,运行的 goroutines 列表,以及调用关系,访问路径为`$HOST/debug/pprof/goroutine`。
* heap:查看活动对象的内存分配情况, 访问路径为`$HOST/debug/pprof/heap`。
* mutex:查看导致互斥锁的竞争持有者的堆栈跟踪,访问路径为`$HOST/debug/pprof/mutex`。
* profile:默认进行 30s 的 CPU Profiling,得到一个分析用的 profile 文件,访问路径为`$HOST/debug/pprof/profile`。
* threadcreate:查看创建新OS线程的堆栈跟踪,访问路径为`$HOST/debug/pprof/threadcreate`。
- Go准备工作
- 依赖管理
- Go基础
- 1、变量和常量
- 2、基本数据类型
- 3、运算符
- 4、流程控制
- 5、数组
- 数组声明和初始化
- 遍历
- 数组是值类型
- 6、切片
- 定义
- slice其他内容
- 7、map
- 8、函数
- 函数基础
- 函数进阶
- 9、指针
- 10、结构体
- 类型别名和自定义类型
- 结构体
- 11、接口
- 12、反射
- 13、并发
- 14、网络编程
- 15、单元测试
- Go常用库/包
- Context
- time
- strings/strconv
- file
- http
- Go常用第三方包
- Go优化
- Go问题排查
- Go框架
- 基础知识点的思考
- 面试题
- 八股文
- 操作系统
- 整理一份资料
- interface
- array
- slice
- map
- MUTEX
- RWMUTEX
- Channel
- waitGroup
- context
- reflect
- gc
- GMP和CSP
- Select
- Docker
- 基本命令
- dockerfile
- docker-compose
- rpc和grpc
- consul和etcd
- ETCD
- consul
- gin
- 一些小点
- 树
- K8s
- ES
- pprof
- mycat
- nginx
- 整理后的面试题
- 基础
- Map
- Chan
- GC
- GMP
- 并发
- 内存
- 算法
- docker