[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 查看消耗排行

### 圖文

* 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